diff options
author | John Högberg <[email protected]> | 2018-04-10 11:50:56 +0200 |
---|---|---|
committer | John Högberg <[email protected]> | 2018-04-16 15:44:56 +0200 |
commit | a7e0369000282c22e784a769b0e41598df1682e9 (patch) | |
tree | 0f4ede9985ac64b3b0d20967e7374ec0ed19868c /erts/emulator/beam/bif_instrs.tab | |
parent | 9128efbb8dadc819938820af0d9de9128e72eb07 (diff) | |
download | otp-a7e0369000282c22e784a769b0e41598df1682e9.tar.gz otp-a7e0369000282c22e784a769b0e41598df1682e9.tar.bz2 otp-a7e0369000282c22e784a769b0e41598df1682e9.zip |
erts: Keep track of which NIF a scheduler is executing
This may be of interest in crash dumps and allows the upcoming
allocation tagging feature to track allocations on a per-NIF basis.
Note that this is only updated when user code calls a NIF; it's not
altered when the emulator calls NIFs during code upgrades or
tracing.
Diffstat (limited to 'erts/emulator/beam/bif_instrs.tab')
-rw-r--r-- | erts/emulator/beam/bif_instrs.tab | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/erts/emulator/beam/bif_instrs.tab b/erts/emulator/beam/bif_instrs.tab index 0932b8b985..0f074280db 100644 --- a/erts/emulator/beam/bif_instrs.tab +++ b/erts/emulator/beam/bif_instrs.tab @@ -432,9 +432,17 @@ nif_bif.call_nif() { live_hf_end = c_p->mbuf; ERTS_CHK_MBUF_SZ(c_p); erts_pre_nif(&env, c_p, (struct erl_module_nif*)I[2], NULL); + + ASSERT((c_p->scheduler_data)->current_nif == NULL); + (c_p->scheduler_data)->current_nif = &env; + nif_bif_result = (*fp)(&env, bif_nif_arity, reg); if (env.exception_thrown) nif_bif_result = THE_NON_VALUE; + + ASSERT((c_p->scheduler_data)->current_nif == &env); + (c_p->scheduler_data)->current_nif = NULL; + erts_post_nif(&env); ERTS_CHK_MBUF_SZ(c_p); |