[libvirt] [PATCH] util: Remove logging handlers in virExec

Cole Robinson crobinso at redhat.com
Wed Feb 3 12:57:42 UTC 2010


On 02/03/2010 03:33 AM, Jiri Denemark wrote:
> ...
>> diff --git a/src/util/util.c b/src/util/util.c
>> index cf1290d..901c0d2 100644
>> --- a/src/util/util.c
>> +++ b/src/util/util.c
>> @@ -415,12 +415,19 @@ __virExec(virConnectPtr conn,
>>          childerr = null;
>>      }
>>  
>> +    /* Ensure we hold the logging lock, to protect child processes
>> +     * from deadlocking on another threads inheirited mutex state */
>> +    virLogLock();
>> +
>>      if ((pid = fork()) < 0) {
>>          virReportSystemError(conn, errno,
>>                               "%s", _("cannot fork child process"));
>>          goto cleanup;
>>      }
>>  
>> +    /* Unlock for both parent and child process */
>> +    virLogUnlock();
>> +
>>      if (pid) { /* parent */
>>          close(null);
>>          if (outfd && *outfd == -1) {
> 
> Hmm, shouldn't we virLogUnlock() even if fork() fails? That is, something
> like:
> 
>     virLogLock();
>     pid = fork();
>     virLogUnlock();
> 
>     if (pid < 0)
>         error;
>     else if (pid)
>         parent;
>     ...
> 
> Jirka
> 

Argh, yes, good call. I'll update the patch and resend.

Thanks,
Cole




More information about the libvir-list mailing list