[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [PATCH 0 of 3] xl: free allocations made at top level



Ian Campbell writes ("[Xen-devel] Re: [PATCH 0 of 3] xl: free allocations made 
at top level"):
> This seems to work. I'm not entirely sure about it though -- it's not
> clear what happens if the thread which calls xc_interface_close is not
> the final thread to exit and whether we would still leak the buffer from
> the thread which does the final exit() call.

Yers.  We don't impose a requirement that the thread that calls
xc_interface_open has to be the one which calls _close, so you can
still leak the buffer from the original thread.

OTOH if you don't want memory leaks you do need to do
xc_interface_close.  So perhaps we should have a reference count or
something ?  Is it even possible to destroy thread-specific data for
another thread ?


Also, while I was reading this code I noticed this:

    pthread_once(&hcall_buf_pkey_once, _xc_init_hcall_buf);

and:

    static void _xc_init_hcall_buf(void)
    {
        pthread_key_create(&hcall_buf_pkey, _xc_clean_hcall_buf);
    }

It seems to me that this is possibly racy, if two threads call
hcall_buf_prep simultaneously for the first time (which is not at all
implausible in some possible scenarios).  pthread_once doesn't seem to
guarantee that the first two calls arrive at once, the 2nd call
doesn't return before the first call has even entered the user
function.  So the thread which loses the race can read an
uninitialised hcall_buf_pkey.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.