diff options
author | Lukas Larsson <[email protected]> | 2016-05-10 15:37:18 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2016-05-10 15:37:18 +0200 |
commit | 36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a (patch) | |
tree | efb8679c65dd9a2f1ebf86490be01777b2c74dba /erts/emulator/hipe/hipe_mode_switch.c | |
parent | dc30187900f1bd12043170b14db68dfbbff33828 (diff) | |
download | otp-36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a.tar.gz otp-36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a.tar.bz2 otp-36dd5c3dd86c91d04a7fc13fd2a89b10af64db5a.zip |
erts: Fix max heap size exit when in hipe mode
Diffstat (limited to 'erts/emulator/hipe/hipe_mode_switch.c')
-rw-r--r-- | erts/emulator/hipe/hipe_mode_switch.c | 5 |
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 |