[CRIU] [PATCH] pstree: Avoid multiple calls to getpid()
Dmitry Safonov
0x7f454c46 at gmail.com
Tue Oct 30 18:54:07 MSK 2018
On 10/28/18 8:42 PM, Radostin Stoyanov wrote:
> Signed-off-by: Radostin Stoyanov <rstoyanov1 at gmail.com>
Reviewed-by: Dmitry Safonov <0x7f454c46 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;
> }
>
Thanks,
Dima
More information about the CRIU
mailing list