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

Re: [Xen-devel] [PATCH] libxenstore: fix threading bug which cause xend startup hang



On Fri, 2010-09-10 at 17:58 +0100, Ian Jackson wrote: 
> I wrote:
> > If a multithreaded caller creates a thread which calls xs_read_watch,
> > before it has set any watches with xs_watch, the thread in
> > xs_read_watch will enter read_message and sit reading the xenstored fd
> > without the appropriate locks held.  Other threads can then
> > concurrently read the xenstored fd, which naturally does not work very
> > well.
> 
> While I was investigating this, I noticed that xs_fileno, which is
> used by numerous applications to be able to select() waiting for
> xenstore watches, always returns -1 and has done so since
> 7268:2144de6eabcc "Make libxenstore thread-safe" in October 2008.
> 
> This is because nothing ever creates the pipe implied by watch_pipe.
> xs_fileno should do so

Doesn't the call to pipe(2) in:
        if ((h->watch_pipe[0] == -1) && (pipe(h->watch_pipe) != -1)) 
do it?

> (and care should be taken that locking is
> appropriate, which needs some thought).

It seems to only be accessed under watch_mutex, apart from get_handle()
xs_daemon_destroy_postfork() and xs_daemon_close() which I guess are
safe.

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®.