aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/code_ix.h
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2013-01-25 15:18:40 +0100
committerSverker Eriksson <[email protected]>2013-01-28 14:36:25 +0100
commit9d61b560f2d8a08d6cfc95dd09c0d37c1d994153 (patch)
tree685f564244597bed31fd64692719a009f466fa01 /erts/emulator/beam/code_ix.h
parentbe062ca7528b3267a6ef08653b001913fc12ae8e (diff)
downloadotp-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/code_ix.h')
-rw-r--r--erts/emulator/beam/code_ix.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/erts/emulator/beam/code_ix.h b/erts/emulator/beam/code_ix.h
index e2bd0da112..3f4f9776a4 100644
--- a/erts/emulator/beam/code_ix.h
+++ b/erts/emulator/beam/code_ix.h
@@ -76,7 +76,7 @@ ErtsCodeIndex erts_active_code_ix(void);
/* Return staging code ix.
* Only used by a process performing code loading/upgrading/deleting/purging.
- * code_ix must be locked.
+ * Code write permission must be seized.
*/
ERTS_GLB_INLINE
ErtsCodeIndex erts_staging_code_ix(void);
@@ -84,9 +84,10 @@ ErtsCodeIndex erts_staging_code_ix(void);
/* Try seize exclusive code write permission. Needed for code staging.
* Main process lock (only) must be held.
* System thread progress must not be blocked.
+ * Caller must not already hold the code write permission.
* Caller is suspended and *must* yield if 0 is returned.
*/
-int erts_try_seize_code_write_permission(struct process*);
+int erts_try_seize_code_write_permission(struct process* c_p);
/* Release code write permission.
* Will resume any suspended waiters.