diff options
Diffstat (limited to 'src/vm/eventpipeconfiguration.cpp')
-rw-r--r-- | src/vm/eventpipeconfiguration.cpp | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/src/vm/eventpipeconfiguration.cpp b/src/vm/eventpipeconfiguration.cpp index 8b703718b2..ae1dd4e099 100644 --- a/src/vm/eventpipeconfiguration.cpp +++ b/src/vm/eventpipeconfiguration.cpp @@ -75,7 +75,7 @@ void EventPipeConfiguration::Initialize() CONTRACTL_END; // Create the configuration provider. - m_pConfigProvider = EventPipe::CreateProvider(SL(s_configurationProviderName)); + m_pConfigProvider = CreateProvider(SL(s_configurationProviderName), NULL, NULL); // Create the metadata event. m_pMetadataEvent = m_pConfigProvider->AddEvent( @@ -86,6 +86,49 @@ void EventPipeConfiguration::Initialize() false); /* needStack */ } +EventPipeProvider* EventPipeConfiguration::CreateProvider(const SString &providerName, EventPipeCallback pCallbackFunction, void *pCallbackData) +{ + CONTRACTL + { + THROWS; + GC_NOTRIGGER; + MODE_ANY; + } + CONTRACTL_END; + + // Allocate a new provider. + EventPipeProvider *pProvider = new EventPipeProvider(this, providerName, pCallbackFunction, pCallbackData); + + // Register the provider with the configuration system. + RegisterProvider(*pProvider); + + return pProvider; +} + +void EventPipeConfiguration::DeleteProvider(EventPipeProvider *pProvider) +{ + CONTRACTL + { + THROWS; + GC_NOTRIGGER; + MODE_ANY; + PRECONDITION(pProvider != NULL); + } + CONTRACTL_END; + + if (pProvider == NULL) + { + return; + } + + // Unregister the provider. + UnregisterProvider(*pProvider); + + // Free the provider itself. + delete(pProvider); +} + + bool EventPipeConfiguration::RegisterProvider(EventPipeProvider &provider) { CONTRACTL |