@@ -765,7 +765,7 @@ session_tracepoint_write_event (
765765 return false;
766766
767767 // Setup iovec array
768- const int max_non_parameter_iov = 8 ;
768+ const int max_non_parameter_iov = 9 ;
769769 const int max_static_io_capacity = 30 ; // Should account for most events that use EventData structs
770770 struct iovec static_io [max_static_io_capacity ];
771771 struct iovec * io = static_io ;
@@ -824,21 +824,35 @@ session_tracepoint_write_event (
824824 uint64_t session_mask = ep_session_get_mask (session );
825825 bool should_write_metadata = !ep_event_was_metadata_written (ep_event , session_mask );
826826 if (should_write_metadata ) {
827+ EventPipeProvider * event_provider = ep_event_get_provider (ep_event );
828+ const ep_char16_t * provider_name_utf16 = ep_provider_get_provider_name_utf16 (event_provider );
829+ uint32_t provider_name_len = (uint32_t )ep_rt_utf16_string_len (provider_name_utf16 );
830+ uint32_t provider_name_size_bytes = (provider_name_len + 1 ) * sizeof (ep_char16_t );
831+ uint32_t event_metadata_len = ep_event_get_metadata_len (ep_event );
832+ uint32_t complete_metadata_len = provider_name_size_bytes + event_metadata_len ;
833+
834+ // Write extension header
827835 uint8_t extension_metadata [1 + sizeof (uint32_t )];
828- uint32_t metadata_len = ep_event_get_metadata_len (ep_event );
829836 extension_metadata [0 ] = 0x01 ; // label
830- * (uint32_t * )& extension_metadata [1 ] = metadata_len ;
837+ * (uint32_t * )& extension_metadata [1 ] = complete_metadata_len ;
831838 io [io_index ].iov_base = extension_metadata ;
832839 io [io_index ].iov_len = sizeof (extension_metadata );
833840 io_index ++ ;
834841 extension_len += sizeof (extension_metadata );
835842 io_bytes_to_write += sizeof (extension_metadata );
836843
844+ // Write provider name (UTF-16 with null terminator)
845+ io [io_index ].iov_base = (void * )provider_name_utf16 ;
846+ io [io_index ].iov_len = provider_name_size_bytes ;
847+ io_index ++ ;
848+ extension_len += provider_name_size_bytes ;
849+ io_bytes_to_write += provider_name_size_bytes ;
850+
837851 io [io_index ].iov_base = (void * )ep_event_get_metadata (ep_event );
838- io [io_index ].iov_len = metadata_len ;
852+ io [io_index ].iov_len = event_metadata_len ;
839853 io_index ++ ;
840- extension_len += metadata_len ;
841- io_bytes_to_write += metadata_len ;
854+ extension_len += event_metadata_len ;
855+ io_bytes_to_write += event_metadata_len ;
842856 }
843857
844858 // Extension Activity IDs
0 commit comments