bug-hurd
[Top][All Lists]
Advanced

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

[PATCH 2/2] libpager: fix potential deadlock


From: Justus Winter
Subject: [PATCH 2/2] libpager: fix potential deadlock
Date: Fri, 21 Mar 2014 13:57:53 +0100

This patch releases the interlock before doing an rpc call, analogous
to 901c61a1d25e7c8963e51012760a82730eda1910.

* libpager/pager-attr.c (pager_change_attributes): Release interlock
before calling memory_object_change_attributes, to let the callbacks
take it.
---
 libpager/pager-attr.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libpager/pager-attr.c b/libpager/pager-attr.c
index 47da12a..ad1560e 100644
--- a/libpager/pager-attr.c
+++ b/libpager/pager-attr.c
@@ -77,11 +77,14 @@ pager_change_attributes (struct pager *p,
        }
     }      
 
+  pthread_mutex_unlock (&p->interlock);
   memory_object_change_attributes (p->memobjcntl, may_cache, copy_strategy,
                                   wait ? p->port.port_right : MACH_PORT_NULL);
   
   if (wait)
     {
+      pthread_mutex_lock (&p->interlock);
+
       while (ar->attrs_pending)
        pthread_cond_wait (&p->wakeup, &p->interlock);
 
@@ -92,7 +95,7 @@ pager_change_attributes (struct pager *p,
            ar->next->prevp = ar->prevp;
          free (ar);
        }
+
+      pthread_mutex_unlock (&p->interlock);
     }
-  
-  pthread_mutex_unlock (&p->interlock);
 }
-- 
1.9.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]