|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] [PATCH] libxenstore: fix threading bug which cause xend
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
|
|
|
|
|