diff options
author | Sverker Eriksson <[email protected]> | 2013-01-25 15:18:40 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2013-01-28 14:36:25 +0100 |
commit | 9d61b560f2d8a08d6cfc95dd09c0d37c1d994153 (patch) | |
tree | 685f564244597bed31fd64692719a009f466fa01 /erts/emulator/beam/erl_bif_trace.c | |
parent | be062ca7528b3267a6ef08653b001913fc12ae8e (diff) | |
download | otp-9d61b560f2d8a08d6cfc95dd09c0d37c1d994153.tar.gz otp-9d61b560f2d8a08d6cfc95dd09c0d37c1d994153.tar.bz2 otp-9d61b560f2d8a08d6cfc95dd09c0d37c1d994153.zip |
erts: Fix ASSERT crash in erts_try_seize_code_write_permission
ASSERT(code_writing_process != c_p);
The assert was actually harmless and could be removed as one solution.
But I think it's better to keep it as a way to catch bugs that would
otherwise lead to horrible deadlocks if a thread "forgets" to call
erts_release_code_write_permission().
As a result erts_release_code_write_permission() must be called BEFORE
resuming the suspended process.
Diffstat (limited to 'erts/emulator/beam/erl_bif_trace.c')
-rw-r--r-- | erts/emulator/beam/erl_bif_trace.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_bif_trace.c b/erts/emulator/beam/erl_bif_trace.c index 99a4394666..69105b8f27 100644 --- a/erts/emulator/beam/erl_bif_trace.c +++ b/erts/emulator/beam/erl_bif_trace.c @@ -386,13 +386,13 @@ static void smp_bp_finisher(void* null) #ifdef DEBUG finish_bp.stager = NULL; #endif + erts_release_code_write_permission(); erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS); if (!ERTS_PROC_IS_EXITING(p)) { erts_resume(p, ERTS_PROC_LOCK_STATUS); } erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS); erts_smp_proc_dec_refc(p); - erts_release_code_write_permission(); } } #endif /* ERTS_SMP */ |