From 184a4d38db21cdc3011a5c906f38c880c1ffdc58 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Thu, 18 Feb 2016 19:44:24 +0100
Subject: erts: Fix lock checker for process locks

Do lock order check *before* trying to seize lock... duh!
---
 erts/emulator/beam/erl_process_lock.h | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

(limited to 'erts')

diff --git a/erts/emulator/beam/erl_process_lock.h b/erts/emulator/beam/erl_process_lock.h
index a64c993e8f..9c59301086 100644
--- a/erts/emulator/beam/erl_process_lock.h
+++ b/erts/emulator/beam/erl_process_lock.h
@@ -523,6 +523,10 @@ erts_smp_proc_lock__(Process *p,
 
     ERTS_LC_ASSERT((locks & ~ERTS_PROC_LOCKS_ALL) == 0);
 
+#ifdef ERTS_ENABLE_LOCK_CHECK
+    erts_proc_lc_lock(p, locks, file, line);
+#endif
+
     old_lflgs = erts_smp_proc_raw_trylock__(p, locks);
 
     if (old_lflgs != 0) {
@@ -544,9 +548,6 @@ erts_smp_proc_lock__(Process *p,
 #ifdef ERTS_ENABLE_LOCK_COUNT
     erts_lcnt_proc_lock_post_x(&(p->lock), locks, file, line);
 #endif
-#ifdef ERTS_ENABLE_LOCK_CHECK
-    erts_proc_lc_lock(p, locks, file, line);
-#endif
 
 #ifdef ERTS_PROC_LOCK_DEBUG
     erts_proc_lock_op_debug(p, locks, 1);
-- 
cgit v1.2.3