aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2016-05-10 15:37:18 +0200
committerLukas Larsson <[email protected]>2016-05-10 15:37:18 +0200
commit36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a (patch)
treeefb8679c65dd9a2f1ebf86490be01777b2c74dba
parentdc30187900f1bd12043170b14db68dfbbff33828 (diff)
downloadotp-36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a.tar.gz
otp-36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a.tar.bz2
otp-36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a.zip
erts: Fix max heap size exit when in hipe mode
-rw-r--r--erts/emulator/hipe/hipe_mode_switch.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/erts/emulator/hipe/hipe_mode_switch.c b/erts/emulator/hipe/hipe_mode_switch.c
index 9ad44b25ac..f532d3151f 100644
--- a/erts/emulator/hipe/hipe_mode_switch.c
+++ b/erts/emulator/hipe/hipe_mode_switch.c
@@ -59,6 +59,7 @@
* TODO: check PCB consistency at native BIF calls
*/
int hipe_modeswitch_debug = 0;
+extern BeamInstr beam_exit[];
#define HIPE_DEBUG 0
@@ -509,6 +510,10 @@ Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[])
if (scb)
ERTS_PROC_SET_SAVED_CALLS_BUF(p, scb);
+ /* The process may have died while it was executing,
+ if so we return out from native code to the interpreter */
+ if (erts_smp_atomic32_read_nob(&p->state) & ERTS_PSFLG_EXITING)
+ p->i = beam_exit;
#ifdef DEBUG
ASSERT(p->debug_reds_in == reds_in);
#endif