aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/global.h
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2013-12-07 00:19:05 +0100
committerRickard Green <[email protected]>2013-12-07 00:19:05 +0100
commit9232f50d4cbe7b051dfd3e83625de0b22536c4c4 (patch)
treef3c52ccc719a9df7a0714de05e2d1e9dde700df0 /erts/emulator/beam/global.h
parent3c00452a81dfde57f85c882029186cfa3c0d348d (diff)
parent9f1f0bff7f98d62f8406e5ecd76f6eb7c1a66ff3 (diff)
downloadotp-9232f50d4cbe7b051dfd3e83625de0b22536c4c4.tar.gz
otp-9232f50d4cbe7b051dfd3e83625de0b22536c4c4.tar.bz2
otp-9232f50d4cbe7b051dfd3e83625de0b22536c4c4.zip
Merge branch 'rickard/garbage_collect/OTP-11388'
* rickard/garbage_collect/OTP-11388: Parallel check_process_code when code_server purge a module Functionality for disabling garbage collection Use asynchronous check_process_code in code_parallel_SUITE Execution of system tasks in context of another process Conflicts: bootstrap/lib/kernel/ebin/hipe_unified_loader.beam erts/preloaded/ebin/erlang.beam erts/preloaded/ebin/erts_internal.beam
Diffstat (limited to 'erts/emulator/beam/global.h')
-rwxr-xr-xerts/emulator/beam/global.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index c1fda3f96c..94bc1b172a 100755
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -650,6 +650,10 @@ Eterm erl_send(Process *p, Eterm to, Eterm msg);
Eterm erl_is_function(Process* p, Eterm arg1, Eterm arg2);
+/* beam_bif_load.c */
+Eterm erts_check_process_code(Process *c_p, Eterm module, int allow_gc, int *redsp);
+
+
/* beam_load.c */
typedef struct {
BeamInstr* current; /* Pointer to: Mod, Name, Arity */
@@ -1121,7 +1125,12 @@ erts_alloc_message_heap_state(Uint size,
if (statep)
*statep = state;
if ((state & (ERTS_PSFLG_EXITING|ERTS_PSFLG_PENDING_EXIT))
+ || (receiver->flags & F_DISABLE_GC)
|| HEAP_LIMIT(receiver) - HEAP_TOP(receiver) <= size) {
+ /*
+ * The heap is either potentially in an inconsistent
+ * state, or not large enough.
+ */
#ifdef ERTS_SMP
if (locked_main) {
*receiver_locks &= ~ERTS_PROC_LOCK_MAIN;