|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] [PATCH, v2] xenstore: Fix deadlock in xs_read_watch
On 08/30/2010 09:16 AM, Stefano Stabellini wrote:
> 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
>
Sorry about that, looks like I picked the wrong patch to send. Corrected
patch attached.
deadlock-fix.patch
Description: Text document
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|