@@ -34,6 +34,11 @@ EventPipeConfiguration::~EventPipeConfiguration()
34
34
MODE_ANY;
35
35
}
36
36
CONTRACTL_END;
37
+
38
+ if (m_pConfigProvider != NULL )
39
+ {
40
+ DeleteProvider (m_pConfigProvider);
41
+ }
37
42
38
43
if (m_pEnabledProviderList != NULL )
39
44
{
@@ -59,7 +64,7 @@ void EventPipeConfiguration::Initialize()
59
64
CONTRACTL_END;
60
65
61
66
// Create the configuration provider.
62
- m_pConfigProvider = EventPipe:: CreateProvider (s_configurationProviderID);
67
+ m_pConfigProvider = CreateProvider (s_configurationProviderID, NULL , NULL );
63
68
64
69
// Create the metadata event.
65
70
m_pMetadataEvent = m_pConfigProvider->AddEvent (
@@ -70,6 +75,49 @@ void EventPipeConfiguration::Initialize()
70
75
false ); /* needStack */
71
76
}
72
77
78
+ EventPipeProvider* EventPipeConfiguration::CreateProvider (const GUID &providerID, EventPipeCallback pCallbackFunction, void *pCallbackData)
79
+ {
80
+ CONTRACTL
81
+ {
82
+ THROWS;
83
+ GC_NOTRIGGER;
84
+ MODE_ANY;
85
+ }
86
+ CONTRACTL_END;
87
+
88
+ // Allocate a new provider.
89
+ EventPipeProvider *pProvider = new EventPipeProvider (this , providerID, pCallbackFunction, pCallbackData);
90
+
91
+ // Register the provider with the configuration system.
92
+ RegisterProvider (*pProvider);
93
+
94
+ return pProvider;
95
+ }
96
+
97
+ void EventPipeConfiguration::DeleteProvider (EventPipeProvider *pProvider)
98
+ {
99
+ CONTRACTL
100
+ {
101
+ THROWS;
102
+ GC_NOTRIGGER;
103
+ MODE_ANY;
104
+ PRECONDITION (pProvider != NULL );
105
+ }
106
+ CONTRACTL_END;
107
+
108
+ if (pProvider == NULL )
109
+ {
110
+ return ;
111
+ }
112
+
113
+ // Unregister the provider.
114
+ UnregisterProvider (*pProvider);
115
+
116
+ // Free the provider itself.
117
+ delete (pProvider);
118
+ }
119
+
120
+
73
121
bool EventPipeConfiguration::RegisterProvider (EventPipeProvider &provider)
74
122
{
75
123
CONTRACTL
@@ -400,8 +448,7 @@ void EventPipeConfiguration::DeleteDeferredProviders()
400
448
EventPipeProvider *pProvider = pElem->GetValue ();
401
449
if (pProvider->GetDeleteDeferred ())
402
450
{
403
- // The act of deleting the provider unregisters it and removes it from the list.
404
- delete (pProvider);
451
+ DeleteProvider (pProvider);
405
452
}
406
453
407
454
pElem = m_pProviderList->GetNext (pElem);
0 commit comments