[PATCH 2/3] leaseshelper: Wait to acquire PID file

Daniel P. Berrangé berrange at redhat.com
Wed Jun 24 13:55:38 UTC 2020


On Mon, Jun 15, 2020 at 01:32:35PM +0200, Michal Privoznik wrote:
> On a DHCP transaction, dnsmasq runs our leases helper which
> updates corresponding JSON files. While one dnsmasq won't run the
> leaseshelper in parallel, two dnsmasqs (from two distinct
> networks) might. To avoid corrupting JSON file, the leaseshelper
> acquires PID file first. Well, the way it's acquiring it is not
> ideal - it calls virPidFileAcquirePath(wait = false); which
> means, that either it acquires the PID file instantly or returns
> an error and does not touch the JSON at all. This in turn means
> that there might be a leases record missing. With wait = true,
> this won't happen.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1840307
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/network/leaseshelper.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
> index 02759f2314..c4258cae4e 100644
> --- a/src/network/leaseshelper.c
> +++ b/src/network/leaseshelper.c
> @@ -160,7 +160,7 @@ main(int argc, char **argv)
>      pid_file = g_strdup(RUNSTATEDIR "/leaseshelper.pid");
>  
>      /* Try to claim the pidfile, exiting if we can't */
> -    if ((pid_file_fd = virPidFileAcquirePath(pid_file, false, getpid())) < 0)
> +    if ((pid_file_fd = virPidFileAcquirePath(pid_file, true, getpid())) < 0)
>          goto cleanup;
>  
>      /* Since interfaces can be hot plugged, we need to make sure that the

Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list