@@ -303,11 +303,11 @@ static void proc_sig_queue_unlock_buffer(ErtsSignalInQueueBuffer* slot);
303303static void handle_message_enqueued_tracing (Process * c_p ,
304304 ErtsSigRecvTracing * tracing ,
305305 ErtsMessage * msg );
306- static void
306+ static int
307307insert_prepared_prio_msg (Process * c_p , ErtsSigRecvTracing * tracing ,
308308 ErtsMessage * sig , Eterm message , Eterm token ,
309309 ErtsMessage * * * next_nm_sig );
310- static void
310+ static int
311311insert_prepared_prio_msg_attached (Process * c_p , ErtsSigRecvTracing * tracing ,
312312 ErtsMessage * sig , void * attached ,
313313 Eterm message , Eterm token ,
@@ -4703,9 +4703,9 @@ handle_exit_signal(Process *c_p, ErtsSigRecvTracing *tracing,
47034703 : ((ErtsSeqTokenExitSignalData * ) xsigd )-> token );
47044704 if (prio ) {
47054705 remove_nm_sig (c_p , sig , next_nm_sig );
4706- insert_prepared_prio_msg (c_p , tracing , sig ,
4707- xsigd -> message , token ,
4708- next_nm_sig );
4706+ cnt += insert_prepared_prio_msg (c_p , tracing , sig ,
4707+ xsigd -> message , token ,
4708+ next_nm_sig );
47094709 }
47104710 else {
47114711 convert_prepared_sig_to_msg (c_p , tracing , sig ,
@@ -4778,17 +4778,19 @@ convert_prepared_down_message(Process *c_p, ErtsSigRecvTracing *tracing,
47784778 int prio , ErtsMessage * sig , Eterm msg ,
47794779 ErtsMessage * * * next_nm_sig )
47804780{
4781+ int cnt = 0 ;
47814782 if (prio ) {
47824783 remove_nm_sig (c_p , sig , next_nm_sig );
4783- insert_prepared_prio_msg (c_p , tracing , sig , msg , am_undefined ,
4784- next_nm_sig );
4784+ cnt += insert_prepared_prio_msg (c_p , tracing , sig , msg , am_undefined ,
4785+ next_nm_sig );
47854786 }
47864787 else {
47874788 convert_prepared_sig_to_msg (c_p , tracing , sig , msg , am_undefined ,
47884789 next_nm_sig );
4790+ cnt ++ ;
47894791 }
47904792 erts_proc_notify_new_message (c_p , ERTS_PROC_LOCK_MAIN );
4791- return 1 ;
4793+ return cnt ;
47924794}
47934795
47944796static int
@@ -4998,11 +5000,10 @@ convert_to_down_message(Process *c_p,
49985000 * priop = !!((* omon )-> flags & ERTS_ML_FLG_PRIO_ML );
49995001 if (* priop ) {
50005002 remove_nm_sig (c_p , sig , next_nm_sig );
5001- insert_prepared_prio_msg_attached (c_p , tracing , mp ,
5002- mp -> data .attached , message ,
5003- am_undefined ,
5004- next_nm_sig );
5005- cnt += 4 ;
5003+ cnt += insert_prepared_prio_msg_attached (c_p , tracing , mp ,
5004+ mp -> data .attached , message ,
5005+ am_undefined ,
5006+ next_nm_sig );
50065007 goto notify_new_message ;
50075008 }
50085009
@@ -6061,9 +6062,9 @@ handle_altact_msg(Process *c_p, ErtsSigRecvTracing *tracing,
60616062 data_attached , next_nm_sig );
60626063 }
60636064 else {
6064- insert_prepared_prio_msg_attached (c_p , tracing , sig ,
6065- data_attached , msg , token ,
6066- next_nm_sig );
6065+ cnt += insert_prepared_prio_msg_attached (c_p , tracing , sig ,
6066+ data_attached , msg , token ,
6067+ next_nm_sig );
60676068 }
60686069 cnt ++ ;
60696070 break ;
@@ -6128,8 +6129,8 @@ handle_altact_msg(Process *c_p, ErtsSigRecvTracing *tracing,
61286129 /* drop faulty encoded external message... */
61296130 return cnt ;
61306131 }
6131- insert_prepared_prio_msg (c_p , tracing , mp , ERL_MESSAGE_TERM (mp ),
6132- token , next_nm_sig );
6132+ cnt += insert_prepared_prio_msg (c_p , tracing , mp , ERL_MESSAGE_TERM (mp ),
6133+ token , next_nm_sig );
61336134 }
61346135 break ;
61356136 }
@@ -9171,13 +9172,13 @@ prio_queue_check_recv_marks(Eterm obj, Eterm *ref,
91719172 }
91729173}
91739174
9174- static void
9175+ static int
91759176insert_prepared_prio_msg_attached (Process * c_p , ErtsSigRecvTracing * tracing ,
91769177 ErtsMessage * sig , void * data_attached ,
91779178 Eterm message , Eterm token ,
91789179 ErtsMessage * * * next_nm_sig )
91799180{
9180- int i , empty_prio_q = !(c_p -> sig_qs .flags & FS_PRIO_MQ_END_MARK );
9181+ int i , cnt = 1 , empty_prio_q = !(c_p -> sig_qs .flags & FS_PRIO_MQ_END_MARK );
91819182 ErtsRecvMarkerBlock * blk = c_p -> sig_qs .recv_mrk_blk ;
91829183 ErtsPrioQInfo * pq_info = get_prio_queue_info (c_p );
91839184 ErtsRecvMarker * pq_end = & pq_info -> marker [ERTS_PRIO_Q_MARK_END ];
@@ -9225,6 +9226,7 @@ insert_prepared_prio_msg_attached(Process *c_p, ErtsSigRecvTracing *tracing,
92259226
92269227 /* Note that this ref has been seen in the prio queue... */
92279228 mark -> in_prioq = !0 ;
9229+ cnt += 4 ;
92289230 }
92299231 }
92309232 }
@@ -9333,33 +9335,46 @@ insert_prepared_prio_msg_attached(Process *c_p, ErtsSigRecvTracing *tracing,
93339335 }
93349336 }
93359337
9336- /* Append the actual prio message to the prio queue... */
93379338 sig -> data .attached = data_attached ;
93389339
93399340 ERL_MESSAGE_TERM (sig ) = message ;
93409341 ERL_MESSAGE_TOKEN (sig ) = token ;
93419342
9343+ if (tracing -> messages .active ) {
9344+ if (ERTS_SIG_IS_EXTERNAL_MSG (sig )) {
9345+ cnt += 50 ; /* Decode is expensive... */
9346+ if (!erts_proc_sig_decode_dist (c_p , ERTS_PROC_LOCK_MAIN ,
9347+ sig , 0 )) {
9348+ /* Bad dist message; drop it... */
9349+ sig -> next = NULL ;
9350+ erts_cleanup_messages (sig );
9351+ return cnt ;
9352+ }
9353+ }
9354+ handle_message_enqueued_tracing (c_p , tracing , sig );
9355+ }
9356+
9357+ /* Append the actual prio message to the prio queue... */
9358+
93429359 * pq_end -> prev_next = sig ;
93439360 pq_end -> prev_next = & sig -> next ;
93449361 sig -> next = (ErtsMessage * ) pq_end ;
93459362
93469363 c_p -> sig_qs .mq_len ++ ;
93479364 erts_chk_sys_mon_long_msgq_on (c_p );
93489365
9349- if (tracing -> messages .active )
9350- handle_message_enqueued_tracing (c_p , tracing , sig );
9351-
9366+ return cnt ;
93529367}
93539368
9354- static void
9369+ static int
93559370insert_prepared_prio_msg (Process * c_p , ErtsSigRecvTracing * tracing ,
93569371 ErtsMessage * sig , Eterm message , Eterm token ,
93579372 ErtsMessage * * * next_nm_sig )
93589373{
9359- insert_prepared_prio_msg_attached (c_p , tracing , sig ,
9360- ERTS_MSG_COMBINED_HFRAG ,
9361- message , token ,
9362- next_nm_sig );
9374+ return insert_prepared_prio_msg_attached (c_p , tracing , sig ,
9375+ ERTS_MSG_COMBINED_HFRAG ,
9376+ message , token ,
9377+ next_nm_sig );
93639378}
93649379
93659380static void
0 commit comments