diff options
author | Lukas Larsson <[email protected]> | 2016-04-05 11:26:52 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2016-04-15 15:08:52 +0200 |
commit | c3e7acb4fe304d117f7361292d36f5d73df3e1c7 (patch) | |
tree | 50777c8c13d2e4eeba302b446c14683821dcd83b /erts/emulator/beam/erl_trace.c | |
parent | a1b352dfc68d501a385240cdb7f45a96cf9e3358 (diff) | |
download | otp-c3e7acb4fe304d117f7361292d36f5d73df3e1c7.tar.gz otp-c3e7acb4fe304d117f7361292d36f5d73df3e1c7.tar.bz2 otp-c3e7acb4fe304d117f7361292d36f5d73df3e1c7.zip |
erts: Make trace_delivered go via sys msg dispatcher again
This is needed as otherwise messages from system_profile
will not be guaranteed to arrive before trace delivered.
Diffstat (limited to 'erts/emulator/beam/erl_trace.c')
-rw-r--r-- | erts/emulator/beam/erl_trace.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_trace.c b/erts/emulator/beam/erl_trace.c index cd3c14e213..bd88769dfc 100644 --- a/erts/emulator/beam/erl_trace.c +++ b/erts/emulator/beam/erl_trace.c @@ -84,6 +84,7 @@ enum ErtsSysMsgType { SYS_MSG_TYPE_UNDEFINED, SYS_MSG_TYPE_SYSMON, SYS_MSG_TYPE_ERRLGR, + SYS_MSG_TYPE_PROC_MSG, SYS_MSG_TYPE_SYSPROF }; @@ -2157,6 +2158,13 @@ erts_queue_error_logger_message(Eterm from, Eterm msg, ErlHeapFragment *bp) enqueue_sys_msg(SYS_MSG_TYPE_ERRLGR, from, am_error_logger, msg, bp); } +void +erts_send_sys_msg_proc(Eterm from, Eterm to, Eterm msg, ErlHeapFragment *bp) +{ + ASSERT(is_internal_pid(to)); + enqueue_sys_msg(SYS_MSG_TYPE_PROC_MSG, from, to, msg, bp); +} + #ifdef DEBUG_PRINTOUTS static void print_msg_type(ErtsSysMsgQ *smqp) @@ -2171,6 +2179,9 @@ print_msg_type(ErtsSysMsgQ *smqp) case SYS_MSG_TYPE_ERRLGR: erts_fprintf(stderr, "ERRLGR "); break; + case SYS_MSG_TYPE_PROC_MSG: + erts_fprintf(stderr, "PROC_MSG "); + break; default: erts_fprintf(stderr, "??? "); break; @@ -2241,6 +2252,8 @@ sys_msg_disp_failure(ErtsSysMsgQ *smqp, Eterm receiver) no_elgger, tag, CAR(list_val(tp[3]))); break; } + case SYS_MSG_TYPE_PROC_MSG: + break; default: ASSERT(0); } @@ -2358,6 +2371,9 @@ sys_msg_dispatcher_func(void *unused) print_msg_type(smqp); #endif switch (smqp->type) { + case SYS_MSG_TYPE_PROC_MSG: + receiver = smqp->to; + break; case SYS_MSG_TYPE_SYSMON: receiver = erts_get_system_monitor(); if (smqp->from == receiver) { |