@@ -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,39 @@ 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+ // Calculate the size of the complete metadata payload:
828+ // - Metadata ID (uint32_t)
829+ // - Provider name (UTF-16 string with null terminator)
830+ // - Event metadata payload
831+ EventPipeProvider * event_provider = ep_event_get_provider (ep_event );
832+ const ep_char16_t * provider_name_utf16 = ep_provider_get_provider_name_utf16 (event_provider );
833+ uint32_t provider_name_len = (uint32_t )ep_rt_utf16_string_len (provider_name_utf16 );
834+ uint32_t provider_name_size_bytes = (provider_name_len + 1 ) * sizeof (ep_char16_t );
835+ uint32_t event_metadata_len = ep_event_get_metadata_len (ep_event );
836+ uint32_t complete_metadata_len = provider_name_size_bytes + event_metadata_len ;
837+
838+ // Write extension header
827839 uint8_t extension_metadata [1 + sizeof (uint32_t )];
828- uint32_t metadata_len = ep_event_get_metadata_len (ep_event );
829840 extension_metadata [0 ] = 0x01 ; // label
830- * (uint32_t * )& extension_metadata [1 ] = metadata_len ;
841+ * (uint32_t * )& extension_metadata [1 ] = complete_metadata_len ;
831842 io [io_index ].iov_base = extension_metadata ;
832843 io [io_index ].iov_len = sizeof (extension_metadata );
833844 io_index ++ ;
834845 extension_len += sizeof (extension_metadata );
835846 io_bytes_to_write += sizeof (extension_metadata );
836847
848+ // Write provider name (UTF-16 with null terminator)
849+ io [io_index ].iov_base = (void * )provider_name_utf16 ;
850+ io [io_index ].iov_len = provider_name_size_bytes ;
851+ io_index ++ ;
852+ extension_len += provider_name_size_bytes ;
853+ io_bytes_to_write += provider_name_size_bytes ;
854+
837855 io [io_index ].iov_base = (void * )ep_event_get_metadata (ep_event );
838- io [io_index ].iov_len = metadata_len ;
856+ io [io_index ].iov_len = event_metadata_len ;
839857 io_index ++ ;
840- extension_len += metadata_len ;
841- io_bytes_to_write += metadata_len ;
858+ extension_len += event_metadata_len ;
859+ io_bytes_to_write += event_metadata_len ;
842860 }
843861
844862 // Extension Activity IDs
0 commit comments