[libvirt] Potential race condition problem

Guannan Ren gren at redhat.com
Sat Sep 29 07:43:25 UTC 2012


On 09/29/2012 03:07 PM, Benjamin Wang (gendwang) wrote:
>
> Hi,
>
>    Currently virInitialize() method defined in libvirt.c has the 
> following code:
>
> int
>
> virInitialize(void)
>
> {
>
>     if (initialized)
>
>         return 0;
>
>     initialized = 1;
>
>     if (virThreadInitialize() < 0 ||
>
> virErrorInitialize() < 0 ||
>
> virRandomInitialize(time(NULL) ^ getpid()) ||
>
> virNodeSuspendInit() < 0)
>
>         return -1;
>
> ......
>
> }
>
> When two threads access virInitialize method, there is no lock for the 
> "initialized" parameter. If the first thread enters this method and 
> set "initialized" to 1,
>
> the second thread could see that "initialized" is 1(Because 
> initialized is not volatiled, I say could). In some situation, before 
> the first thread finishes all the initialization,
>
> the second thread could use some resources which should be initialized 
> in Initialize method.
>
> If you have any comments, please let me know. Thanks!
>
> B.R.
>
> Benjamin Wang
>
>

       As the comments above the function said,
       "It's better to call this routine at startup in multithreaded 
applications to avoid potential race when initializing the library."


       Guannan


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120929/1daf8225/attachment-0001.htm>


More information about the libvir-list mailing list