criu/revert-fix-BUG-at-criu-pstree.c-452.patch
weidongkl c84e5418d1
sync: 同步sp3分支修改&修复版本降级bug
Signed-off-by: weidongkl <weidong@uniontech.com>
2024-05-28 14:17:27 +08:00

90 lines
2.7 KiB
Diff

Subject: [PATCH 1/1] revert: fix BUG at criu/pstree.c:452
Not all the process which is dumped by criu is session leader, the
enhancing verification is annoying, because it causes many problems in
some testcases. Therefore, revert this bugfix.
If the bugfix is resumed, using `setsid` to start process is necessary,
and using `stdbuf -oL` to redirect standard output at the same time.
This bug detail sees #1332.
Revert "pstree: don't change sid/gid-s if current sid/gid is the same"
This reverts commit 90e03b1a1142ca40fb78de9eb04944ab51d06eeb.
Revert "pstree: check for pid collision before switching to new sid/gid"
This reverts commit 7e6a1a7011b404fbf0108b062bda118e9a696b60.
---
criu/pstree.c | 37 ++++++++++---------------------------
1 file changed, 10 insertions(+), 27 deletions(-)
diff --git a/criu/pstree.c b/criu/pstree.c
index d5080e515..bf09c761c 100644
--- a/criu/pstree.c
+++ b/criu/pstree.c
@@ -340,7 +340,6 @@ static int prepare_pstree_for_shell_job(pid_t pid)
pid_t current_gid = getpgid(pid);
struct pstree_item *pi;
- struct pid *tmp;
pid_t old_sid;
pid_t old_gid;
@@ -348,7 +347,6 @@ static int prepare_pstree_for_shell_job(pid_t pid)
if (!opts.shell_job)
return 0;
- /* root_item is a session leader */
if (root_item->sid == vpid(root_item))
return 0;
@@ -370,37 +368,22 @@ static int prepare_pstree_for_shell_job(pid_t pid)
*/
old_sid = root_item->sid;
- if (old_sid != current_sid) {
- pr_info("Migrating process tree (SID %d->%d)\n", old_sid, current_sid);
- tmp = pstree_pid_by_virt(current_sid);
- if (tmp) {
- pr_err("Current sid %d intersects with pid (%d) in images\n", current_sid, tmp->state);
- return -1;
- }
+ pr_info("Migrating process tree (SID %d->%d)\n",
+ old_sid, current_sid);
- for_each_pstree_item(pi) {
- if (pi->sid == old_sid)
- pi->sid = current_sid;
- }
-
- if (lookup_create_item(current_sid) == NULL)
- return -1;
+ for_each_pstree_item(pi) {
+ if (pi->sid == old_sid)
+ pi->sid = current_sid;
}
- /* root_item is a group leader */
- if (root_item->pgid == vpid(root_item))
- return 0;
-
old_gid = root_item->pgid;
- if (old_gid != current_gid) {
- pr_info("Migrating process tree (GID %d->%d)\n", old_gid, current_gid);
-
- tmp = pstree_pid_by_virt(current_gid);
- if (tmp) {
- pr_err("Current gid %d intersects with pid (%d) in images\n", current_gid, tmp->state);
+ if (old_gid != vpid(root_item)) {
+ if (lookup_create_item(current_sid) == NULL)
return -1;
- }
+
+ pr_info("Migrating process tree (GID %d->%d)\n",
+ old_gid, current_gid);
for_each_pstree_item(pi) {
if (pi->pgid == old_gid)
--
2.35.1