@@ -35,12 +35,16 @@ provider_prepare_callback_data (
3535// _Requires_lock_held (ep)
3636static
3737void
38- provider_refresh_all_events (EventPipeProvider * provider );
38+ provider_refresh_all_events (
39+ EventPipeProvider * provider ,
40+ uint64_t session_mask );
3941
4042// _Requires_lock_held (ep)
4143static
4244void
43- provider_refresh_event_state (EventPipeEvent * ep_event );
45+ provider_refresh_event_state (
46+ EventPipeEvent * ep_event ,
47+ uint64_t session_mask );
4448
4549// Compute the enabled bit mask, the ith bit is 1 iff an event with the
4650// given (provider, keywords, eventLevel) is enabled for the ith session.
@@ -96,7 +100,9 @@ provider_prepare_callback_data (
96100
97101static
98102void
99- provider_refresh_all_events (EventPipeProvider * provider )
103+ provider_refresh_all_events (
104+ EventPipeProvider * provider ,
105+ uint64_t session_mask )
100106{
101107 EP_ASSERT (provider != NULL );
102108
@@ -105,7 +111,7 @@ provider_refresh_all_events (EventPipeProvider *provider)
105111 EP_ASSERT (provider -> event_list != NULL );
106112
107113 DN_LIST_FOREACH_BEGIN (EventPipeEvent * , current_event , provider -> event_list ) {
108- provider_refresh_event_state (current_event );
114+ provider_refresh_event_state (current_event , session_mask );
109115 } DN_LIST_FOREACH_END ;
110116
111117 ep_requires_lock_held ();
@@ -114,7 +120,9 @@ provider_refresh_all_events (EventPipeProvider *provider)
114120
115121static
116122void
117- provider_refresh_event_state (EventPipeEvent * ep_event )
123+ provider_refresh_event_state (
124+ EventPipeEvent * ep_event ,
125+ uint64_t session_mask )
118126{
119127 EP_ASSERT (ep_event != NULL );
120128
@@ -129,6 +137,11 @@ provider_refresh_event_state (EventPipeEvent *ep_event)
129137 int64_t enable_mask = provider_compute_event_enable_mask (config , provider , ep_event );
130138 ep_event_set_enabled_mask (ep_event , enable_mask );
131139
140+ // If session_mask is not zero, that session is being enabled/disabled.
141+ // We need to unset the metadata_written_mask for this session.
142+ if (session_mask != 0 )
143+ ep_event_update_metadata_written_mask (ep_event , session_mask , false);
144+
132145 ep_requires_lock_held ();
133146 return ;
134147}
@@ -277,7 +290,7 @@ ep_provider_add_event (
277290 // Take the config lock before inserting a new event.
278291 EP_LOCK_ENTER (section1 )
279292 ep_raise_error_if_nok_holding_lock (dn_list_push_back (provider -> event_list , instance ), section1 );
280- provider_refresh_event_state (instance );
293+ provider_refresh_event_state (instance , 0 );
281294 EP_LOCK_EXIT (section1 )
282295
283296ep_on_exit :
@@ -323,7 +336,7 @@ provider_set_config (
323336 provider -> keywords = keywords_for_all_sessions ;
324337 provider -> provider_level = level_for_all_sessions ;
325338
326- provider_refresh_all_events (provider );
339+ provider_refresh_all_events (provider , session_mask );
327340 provider_prepare_callback_data (provider , provider -> keywords , provider -> provider_level , filter_data , callback_data , session_id );
328341
329342 ep_requires_lock_held ();
@@ -352,7 +365,7 @@ provider_unset_config (
352365 provider -> keywords = keywords_for_all_sessions ;
353366 provider -> provider_level = level_for_all_sessions ;
354367
355- provider_refresh_all_events (provider );
368+ provider_refresh_all_events (provider , session_mask );
356369 provider_prepare_callback_data (provider , provider -> keywords , provider -> provider_level , filter_data , callback_data , (EventPipeSessionID )0 );
357370
358371 ep_requires_lock_held ();
@@ -517,7 +530,7 @@ provider_add_event (
517530 ep_raise_error_if_nok (instance != NULL );
518531
519532 ep_raise_error_if_nok (dn_list_push_back (provider -> event_list , instance ));
520- provider_refresh_event_state (instance );
533+ provider_refresh_event_state (instance , 0 );
521534
522535ep_on_exit :
523536 ep_requires_lock_held ();
0 commit comments