commit-hurd
[Top][All Lists]
Advanced

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

[hurd] 02/13: libpager: fix potential deadlock


From: Samuel Thibault
Subject: [hurd] 02/13: libpager: fix potential deadlock
Date: Wed, 26 Mar 2014 12:12:14 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch upstream
in repository hurd.

commit 59b6c01edcd7013a112aeaf9d0bc33a8d2a2b8f1
Author: Justus Winter <address@hidden>
Date:   Wed Mar 19 12:09:23 2014 +0100

    libpager: fix potential deadlock
    
    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);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

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