[libvirt] [PATCH v2] rpc: make daemon spawning a bit more intelligent

Martin Kletzander mkletzan at redhat.com
Wed Sep 17 15:02:10 UTC 2014


On Wed, Sep 17, 2014 at 10:59:21AM -0400, John Ferlan wrote:
>
>
>On 09/17/2014 10:00 AM, Martin Kletzander wrote:
>> On Tue, Sep 16, 2014 at 10:22:53AM -0400, John Ferlan wrote:
>>>
>>>
>>> On 09/16/2014 05:16 AM, Martin Kletzander wrote:
>>>> This way it behaves more like the daemon itself does (acquiring a
>>>> pidfile, deleting the socket before binding, etc.).
>>>>
>>>> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=927369
>>>> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1138604
>>>>
>>>> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
>>>> ---
>>>>  src/rpc/virnetsocket.c | 65 +++++++++++++++++++++++++++++++++++++++++++-------
>>>>  1 file changed, 57 insertions(+), 8 deletions(-)
>>>>
>>>
>>> The error path/retry logic needs a tweak... I added some inline thinking
>>> since we don't have a virtual whiteboard to share on this!
>>>
>>
>> Yes, it does.  I didn't think it through from scratch, just adjusted
>> to your comments.  This time I went through it few times.  Just let me
>> confirm I understood what you meant everywhere.
>>
>
>You did :-)
>
><...snip...>
>
>>
>> Wow, I just reached this part of the mail when I wrote it already :)
>
>Funny how that happens.
>
>>
>> My current diff to the previous version looks like this:
>>
>> diff --git i/src/rpc/virnetsocket.c w/src/rpc/virnetsocket.c
>> index 7be1492..e0efb14 100644
>> --- i/src/rpc/virnetsocket.c
>> +++ w/src/rpc/virnetsocket.c
>> @@ -596,7 +596,6 @@ int virNetSocketNewConnectUNIX(const char *path,
>>              goto error;
>>
>>          pidfd = virPidFileAcquirePath(pidpath, false, getpid());
>> -        VIR_FREE(pidpath);
>>          if (pidfd < 0) {
>>              /*
>>               * This can happen in a very rare case of two clients
>>               spawning two
>> @@ -650,6 +649,7 @@ int virNetSocketNewConnectUNIX(const char *path,
>>               * time without spawning the daemon.
>>               */
>>              spawnDaemon = false;
>> +            virPidFileDeletePath(pidpath);
>>              VIR_FORCE_CLOSE(pidfd);
>>              VIR_FORCE_CLOSE(passfd);
>>              goto retry;
>> @@ -674,6 +674,7 @@ int virNetSocketNewConnectUNIX(const char *path,
>>           * virCommandHook inside a virNetSocketForkDaemon().
>>           */
>>          VIR_FORCE_CLOSE(pidfd);
>> +        pidfd = -1;
>
>VIR_FORCE_CLOSE() will do this for you
>
>>          if (virNetSocketForkDaemon(binary, passfd) < 0)
>>              goto error;
>>      }
>> @@ -687,10 +688,12 @@ int virNetSocketNewConnectUNIX(const char *path,
>>      if (!(*retsock = virNetSocketNew(&localAddr, &remoteAddr, true,
>>      fd, -1, 0)))
>>          goto error;
>>
>> +    VIR_FREE(pidpath);
>> +
>>      return 0;
>>
>>   error:
>> -    if (pidfd > 0)
>> +    if (pidfd >= 0)
>>          virPidFileDeletePath(pidpath);
>>      VIR_FREE(pidpath);
>>      VIR_FORCE_CLOSE(fd);
>> --
>>
>> Is that fine or should I use that goto error; everywhere after
>> acquiring the pidfile or is it better for you to see it in another
>> version?
>>
>>
>This is fine - I think things are now covered.
>
>ACK
>

Thanks for you thorough review, I squashed it in, remove that one
unnecessary pidfd = -1 and pushed it.

Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140917/edc17909/attachment-0001.sig>


More information about the libvir-list mailing list