[CRIU] [PATCH 2/2] remap: don't add remaps for a dead pid more than once
Pavel Emelyanov
xemul at parallels.com
Tue Sep 23 09:39:37 PDT 2014
On 09/19/2014 08:34 PM, Tycho Andersen wrote:
> Unless we seek and re-read the PB images, the only way I can see to do this is
> to keep a list of the previously seen dead pids and check if a new remap is in
> that list.
>
> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
applied, thanks
> ---
> files-reg.c | 39 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/files-reg.c b/files-reg.c
> index f788290..fef5bd7 100644
> --- a/files-reg.c
> +++ b/files-reg.c
> @@ -550,10 +550,49 @@ static int dump_linked_remap(char *path, int len, const struct stat *ost,
> &rpe, PB_REMAP_FPATH);
> }
>
> +static int have_seen_dead_pid(pid_t pid)
> +{
> + static pid_t *dead_pids = NULL;
> + static int n_dead_pids = 0;
> +
> + if (dead_pids) {
> + int i;
> + void *m;
> +
> + for (i = 0; i < n_dead_pids; i++)
> + if (dead_pids[i] == pid)
> + return 1;
> +
> + m = realloc(dead_pids, sizeof(*dead_pids) * (n_dead_pids + 1));
> + if (!m)
> + return -1;
> +
> + dead_pids = m;
> + dead_pids[n_dead_pids++] = pid;
> + } else {
> + dead_pids = malloc(sizeof(*dead_pids));
> + if (!dead_pids)
> + return -1;
> + *dead_pids = pid;
> + n_dead_pids++;
> + }
> +
> + return 0;
> +}
> +
> static int dump_dead_process_remap(pid_t pid, char *path, int len, const struct stat *ost,
> int lfd, u32 id, struct ns_id *nsid)
> {
> RemapFilePathEntry rpe = REMAP_FILE_PATH_ENTRY__INIT;
> + int ret;
> +
> + ret = have_seen_dead_pid(pid);
> + if (ret < 0)
> + return -1;
> + if (ret) {
> + pr_info("Found dead pid %d already, skipping remap\n", pid);
> + return 0;
> + }
>
> rpe.orig_id = id;
> rpe.remap_id = pid;
>
More information about the CRIU
mailing list