{
// The EventPipeProvider handle.
private IntPtr m_provHandle = IntPtr.Zero;
+ private object m_createEventLock = new object();
+ private IntPtr m_writeEventStringeEventHandle = IntPtr.Zero;
// Register an event provider.
unsafe uint IEventProvider.EventRegister(
}
EventPipeInternal.WriteEventData(eventHandle, userData, (uint)userDataCount, activityId, relatedActivityId);
}
+ else
+ {
+ if (m_writeEventStringeEventHandle == IntPtr.Zero)
+ {
+ lock (m_createEventLock)
+ {
+ if (m_writeEventStringeEventHandle == IntPtr.Zero)
+ {
+ string eventName = "WriteEventString";
+ EventParameterInfo paramInfo = default(EventParameterInfo);
+ paramInfo.SetInfo("message", typeof(string));
+ byte[]? metadata = EventPipeMetadataGenerator.Instance.GenerateMetadata(0, eventName, 0, (uint)EventLevel.LogAlways, 0, new EventParameterInfo[] { paramInfo });
+ uint metadataLength = (metadata != null) ? (uint)metadata.Length : 0;
+
+ fixed (byte* pMetadata = metadata)
+ {
+ m_writeEventStringeEventHandle = ((IEventProvider)this).DefineEventHandle(0, eventName, 0, 0, (uint)EventLevel.LogAlways, pMetadata, metadataLength);
+ }
+ }
+ }
+ }
+
+ EventPipeInternal.WriteEventData(m_writeEventStringeEventHandle, userData, (uint)userDataCount, activityId, relatedActivityId);
+ }
return EventProvider.WriteEventErrorCode.NoError;
}
private unsafe void WriteEventString(EventLevel level, long keywords, string msgString)
{
#if FEATURE_MANAGED_ETW || FEATURE_PERFTRACING
+ bool allAreNull = true;
#if FEATURE_MANAGED_ETW
- if (m_etwProvider == null)
- {
- return;
- }
+ allAreNull &= (m_etwProvider == null);
#endif // FEATURE_MANAGED_ETW
#if FEATURE_PERFTRACING
- if (m_eventPipeProvider == null)
+ allAreNull &= (m_eventPipeProvider == null);
+#endif // FEATURE_PERFTRACING
+ if (allAreNull)
{
return;
}
-#endif // FEATURE_PERFTRACING
+
const string EventName = "EventSourceMessage";
if (SelfDescribingEvents)
{