diff options
author | Sverker Eriksson <[email protected]> | 2017-01-23 17:37:49 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2017-01-23 17:37:49 +0100 |
commit | adce9147ba242a8aef7d10cbbe8e4375ecdff0aa (patch) | |
tree | 688710d8612f621f7bcec662d1cf6f6fc5804ee3 /erts/emulator/beam/erl_message.c | |
parent | 3f5530bf1ec283bbb8fd75e57947fe3218148ca1 (diff) | |
parent | 9e862df2bf26b9b1d79ba3b447945b7c0612e3d0 (diff) | |
download | otp-adce9147ba242a8aef7d10cbbe8e4375ecdff0aa.tar.gz otp-adce9147ba242a8aef7d10cbbe8e4375ecdff0aa.tar.bz2 otp-adce9147ba242a8aef7d10cbbe8e4375ecdff0aa.zip |
Merge branch 'sverker/ASSERT_IN_ENV'
* sverker/ASSERT_IN_ENV:
erts: Add macro ERTS_PROC_LOCKS_HIGHER_THAN
erts: Cleanup and extra assertions in nif_SUITE.c
erts: Cleanup enif_make_reverse_list
erts: Add assertions for correct ErlNifEnv
erts: Make erts_dbg_within_proc available
# Conflicts:
# erts/emulator/beam/erl_gc.h
Diffstat (limited to 'erts/emulator/beam/erl_message.c')
-rw-r--r-- | erts/emulator/beam/erl_message.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c index 792b69bb37..547e9cac64 100644 --- a/erts/emulator/beam/erl_message.c +++ b/erts/emulator/beam/erl_message.c @@ -285,9 +285,11 @@ erts_queue_dist_message(Process *rcvr, if (!(rcvr_locks & ERTS_PROC_LOCK_MSGQ)) { if (erts_smp_proc_trylock(rcvr, ERTS_PROC_LOCK_MSGQ) == EBUSY) { ErtsProcLocks need_locks = ERTS_PROC_LOCK_MSGQ; - if (rcvr_locks & ERTS_PROC_LOCK_STATUS) { - erts_smp_proc_unlock(rcvr, ERTS_PROC_LOCK_STATUS); - need_locks |= ERTS_PROC_LOCK_STATUS; + ErtsProcLocks unlocks = + rcvr_locks & ERTS_PROC_LOCKS_HIGHER_THAN(ERTS_PROC_LOCK_MSGQ); + if (unlocks) { + erts_smp_proc_unlock(rcvr, unlocks); + need_locks |= unlocks; } erts_smp_proc_lock(rcvr, need_locks); } @@ -406,7 +408,7 @@ queue_messages(Process* receiver, if (state & (ERTS_PSFLG_EXITING|ERTS_PSFLG_PENDING_EXIT)) goto exiting; - need_locks = receiver_locks & (ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE); + need_locks = receiver_locks & ERTS_PROC_LOCKS_HIGHER_THAN(ERTS_PROC_LOCK_MSGQ); if (need_locks) { erts_smp_proc_unlock(receiver, need_locks); } |