diff options
author | Sverker Eriksson <[email protected]> | 2019-03-29 16:45:46 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2019-03-29 16:45:46 +0100 |
commit | 1892e8580d2815a7804954b0e7fa8642d0be4a44 (patch) | |
tree | 4e3cca508753d9abef75b3ca935434d07ca9dd2c /erts/emulator/beam | |
parent | 4358bd7d4f8891dba24aa9ac7148b05505d285a4 (diff) | |
parent | 97bd138d220bcb863a7e09dd420f879137c09a6c (diff) | |
download | otp-1892e8580d2815a7804954b0e7fa8642d0be4a44.tar.gz otp-1892e8580d2815a7804954b0e7fa8642d0be4a44.tar.bz2 otp-1892e8580d2815a7804954b0e7fa8642d0be4a44.zip |
Merge branch 'maint'
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/beam_emu.c | 15 | ||||
-rw-r--r-- | erts/emulator/beam/msg_instrs.tab | 1 |
2 files changed, 10 insertions, 6 deletions
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c index f1d8609066..ea01ce597d 100644 --- a/erts/emulator/beam/beam_emu.c +++ b/erts/emulator/beam/beam_emu.c @@ -3267,20 +3267,23 @@ erts_is_builtin(Eterm Mod, Eterm Name, int arity) /* - * Return the current number of reductions for the given process. + * Return the current number of reductions consumed by the given process. * To get the total number of reductions, p->reds must be added. */ Uint -erts_current_reductions(Process *current, Process *p) +erts_current_reductions(Process *c_p, Process *p) { - if (current != p) { + Sint reds_left; + if (c_p != p || !(erts_atomic32_read_nob(&c_p->state) + & ERTS_PSFLG_RUNNING)) { return 0; - } else if (current->fcalls < 0 && ERTS_PROC_GET_SAVED_CALLS_BUF(current)) { - return current->fcalls + CONTEXT_REDS; + } else if (c_p->fcalls < 0 && ERTS_PROC_GET_SAVED_CALLS_BUF(c_p)) { + reds_left = c_p->fcalls + CONTEXT_REDS; } else { - return REDS_IN(current) - current->fcalls; + reds_left = c_p->fcalls; } + return REDS_IN(c_p) - reds_left; } int diff --git a/erts/emulator/beam/msg_instrs.tab b/erts/emulator/beam/msg_instrs.tab index 6f8d1469ef..b08466c830 100644 --- a/erts/emulator/beam/msg_instrs.tab +++ b/erts/emulator/beam/msg_instrs.tab @@ -105,6 +105,7 @@ i_loop_rec(Dest) { $SET_CP_I_ABS(I); c_p->arity = 0; c_p->current = NULL; + c_p->fcalls = FCALLS; FCALLS -= erts_proc_sig_receive_helper(c_p, FCALLS, neg_o_reds, &msgp, &get_out); SWAPIN; |