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

Re: [Xen-devel] [PATCH] xenstore: Fix deadlock in xs_read_watch



On Thu, 26 Aug 2010, Daniel De Graaf wrote:
> When read_message returns -1 while a read is pending, an attempt is made
> to lock h->request_mutex which is already locked by the reader. Change
> the read thread to only exit on thread cancellation, where
> read_thr_exists will return 0.
> 
> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
> 
> diff -r 6bebaf40e925 tools/xenstore/xs.c
> --- a/tools/xenstore/xs.c     Tue Jul 20 13:42:17 2010 +0100
> +++ b/tools/xenstore/xs.c     Thu Aug 26 17:08:55 2010 -0400
> @@ -271,6 +271,7 @@
>  {
>  #ifdef USE_PTHREAD
>       if (h->read_thr_exists) {
> +             h->read_thr_exists = 0;
>               pthread_cancel(h->read_thr);
>               pthread_join(h->read_thr, NULL);
>       }
> @@ -667,7 +668,7 @@
>       mutex_lock(&h->watch_mutex);
>  
>       /* Wait on the condition variable for a watch to fire. */
> -     while (list_empty(&h->watch_list) && read_thread_exists(h))
> +     while (list_empty(&h->watch_list) && (!read_from_thread || 
> read_thread_exists(h)))
>               condvar_wait(&h->watch_condvar, &h->watch_mutex, h);
>       if (!read_thread_exists(h)) {
>               mutex_unlock(&h->watch_mutex);

read_from_thread is not declared in this function



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