[CRIU] [PATCH] pstree: Avoid multiple calls to getpid()

Radostin Stoyanov rstoyanov1 at gmail.com
Sun Oct 28 23:42:51 MSK 2018


Signed-off-by: Radostin Stoyanov <rstoyanov1 at gmail.com>
---
 criu/pstree.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/criu/pstree.c b/criu/pstree.c
index 928fe2d1..980d19fd 100644
--- a/criu/pstree.c
+++ b/criu/pstree.c
@@ -333,10 +333,10 @@ err:
 	return ret;
 }
 
-static int prepare_pstree_for_shell_job(void)
+static int prepare_pstree_for_shell_job(pid_t current_pid)
 {
-	pid_t current_sid = getsid(getpid());
-	pid_t current_gid = getpgid(getpid());
+	pid_t current_sid = getsid(current_pid);
+	pid_t current_gid = getpgid(current_pid);
 
 	struct pstree_item *pi;
 
@@ -625,12 +625,12 @@ static int get_free_pid()
 	return -1;
 }
 
-static int prepare_pstree_ids(void)
+static int prepare_pstree_ids(pid_t current_pid)
 {
 	struct pstree_item *item, *child, *helper, *tmp;
 	LIST_HEAD(helpers);
 
-	pid_t current_pgid = getpgid(getpid());
+	pid_t current_pgid = getpgid(current_pid);
 
 	/*
 	 * Some task can be reparented to init. A helper task should be added
@@ -910,7 +910,7 @@ static int prepare_pstree_kobj_ids(void)
 int prepare_pstree(void)
 {
 	int ret;
-	pid_t pid_max = 0, kpid_max = 0;
+	pid_t pid_max = 0, kpid_max = 0, current_pid;
 	int fd;
 	char buf[21];
 
@@ -945,12 +945,14 @@ int prepare_pstree(void)
 		}
 	}
 
+	current_pid = getpid();
+
 	if (!ret)
 		/*
 		 * Shell job may inherit sid/pgid from the current
 		 * shell, not from image. Set things up for this.
 		 */
-		ret = prepare_pstree_for_shell_job();
+		ret = prepare_pstree_for_shell_job(current_pid);
 	if (!ret)
 		/*
 		 * Walk the collected tree and prepare for restoring
@@ -962,7 +964,7 @@ int prepare_pstree(void)
 		 * Session/Group leaders might be dead. Need to fix
 		 * pstree with properly injected helper tasks.
 		 */
-		ret = prepare_pstree_ids();
+		ret = prepare_pstree_ids(current_pid);
 
 	return ret;
 }
-- 
2.17.2



More information about the CRIU mailing list