diff mbox

[2/3] linux-user: Fix mmap_lock ordering

Message ID 8854a55127930f5eb009ec9a235871917cce0c8d.1259931926.git.riku.voipio@nokia.com
State New
Headers show

Commit Message

riku.voipio@nokia.com Dec. 4, 2009, 1:16 p.m. UTC
From: Riku Voipio <riku.voipio@nokia.com>

mmap_lock() can be called while tb_lock() is being held. To
avoid deadlock when one thread is holding mmap_lock and another
tb_lock, _always_ lock first tb_lock().

Signed-off-by: Riku Voipio <riku.voipio@nokia.com>
---
 linux-user/main.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/linux-user/main.c b/linux-user/main.c
index 5fbcda2..2015f32 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -99,13 +99,14 @@  static int pending_cpus;
 /* Make sure everything is in a consistent state for calling fork().  */
 void fork_start(void)
 {
-    mmap_fork_start();
     pthread_mutex_lock(&tb_lock);
     pthread_mutex_lock(&exclusive_lock);
+    mmap_fork_start();
 }
 
 void fork_end(int child)
 {
+    mmap_fork_end(child);
     if (child) {
         /* Child processes created by fork() only have a single thread.
            Discard information about the parent threads.  */
@@ -122,7 +123,6 @@  void fork_end(int child)
         pthread_mutex_unlock(&exclusive_lock);
         pthread_mutex_unlock(&tb_lock);
     }
-    mmap_fork_end(child);
 }
 
 /* Wait for pending exclusive operations to complete.  The exclusive lock