diff options
author | Sverker Eriksson <[email protected]> | 2012-02-22 19:25:59 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2012-02-23 12:19:42 +0100 |
commit | 6d7073e33a8f326b8a37eaf5539aa322a06a732c (patch) | |
tree | 7f4f87f1649772b17899fbdc63bbea37ebccdd62 /erts/emulator/beam/beam_debug.c | |
parent | 17c62a8d1158e2c13be403e62d81140c705a8444 (diff) | |
download | otp-6d7073e33a8f326b8a37eaf5539aa322a06a732c.tar.gz otp-6d7073e33a8f326b8a37eaf5539aa322a06a732c.tar.bz2 otp-6d7073e33a8f326b8a37eaf5539aa322a06a732c.zip |
erts: Seize code_ix lock when updating trace settings
We want to avoid the race when trace settings are done in the time gap
while a code stager process is waiting for thread process before
commiting and releasing code_ix lock.
Diffstat (limited to 'erts/emulator/beam/beam_debug.c')
-rw-r--r-- | erts/emulator/beam/beam_debug.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c index d9e9d0e348..d288a37911 100644 --- a/erts/emulator/beam/beam_debug.c +++ b/erts/emulator/beam/beam_debug.c @@ -114,6 +114,10 @@ erts_debug_breakpoint_2(BIF_ALIST_2) mfa[2] = signed_val(mfa[2]); } + if (!erts_try_lock_code_ix(BIF_P)) { + ERTS_BIF_YIELD2(bif_export[BIF_erts_debug_breakpoint_2], + BIF_P, BIF_ARG_1, BIF_ARG_2); + } erts_smp_proc_unlock(p, ERTS_PROC_LOCK_MAIN); erts_smp_thr_progress_block(); @@ -125,7 +129,7 @@ erts_debug_breakpoint_2(BIF_ALIST_2) erts_smp_thr_progress_unblock(); erts_smp_proc_lock(p, ERTS_PROC_LOCK_MAIN); - + erts_unlock_code_ix(); return res; error: |