[Libguestfs] [PATCH libnbd 1/2] lib: Avoid killing subprocess twice.

Eric Blake eblake at redhat.com
Thu Sep 26 18:42:19 UTC 2019


On 9/26/19 11:40 AM, Richard W.M. Jones wrote:
> If the user calls nbd_kill_subprocess, we shouldn't kill the process
> again when we close the handle (since the process has likely gone and
> we might be killing a different process).
> ---
>   lib/handle.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/lib/handle.c b/lib/handle.c
> index 2af25fe..5ad818e 100644
> --- a/lib/handle.c
> +++ b/lib/handle.c
> @@ -315,6 +315,8 @@ nbd_unlocked_kill_subprocess (struct nbd_handle *h, int signum)
>       return -1;
>     }
>   
> +  h->pid = -1;
> +

Ouch - this means we completely forget about the child process, even if 
signum == SIGHUP and was meant merely to get the server to reload state 
rather than to kill it (we've talked about making nbdkit have a way to 
reload configuration); and prevents a client from using the API a second 
time to send a more severe signal like SIGKILL if the first didn't have 
the desired effect.

You are right, however, that once this is called, we have to be more 
careful that any future interaction with the pid does not race with a 
scenario where our child has gone away, and some other process come into 
its place.  Is it viable to check /proc to see if the child process is 
the same one that we spawned, for example, /proc/CHILD/status looking to 
see if PPid: still points to us?

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org




More information about the Libguestfs mailing list