Skip to content

Commit d72dcb6

Browse files
authored
[ETW Exporter] - ETW provider handle cleanup (#1322)
1 parent 3122254 commit d72dcb6

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

exporters/etw/include/opentelemetry/exporters/etw/etw_provider.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ class ETWProvider
203203
{
204204
std::lock_guard<std::mutex> lock(m_providerMapLock);
205205

206-
auto m = providers();
206+
// use reference to provider list, NOT it' copy.
207+
auto &m = providers();
207208
auto it = m.begin();
208209
while (it != m.end())
209210
{
@@ -228,7 +229,10 @@ class ETWProvider
228229
}
229230

230231
it->second.providerHandle = INVALID_HANDLE;
231-
m.erase(it);
232+
if (result == STATUS_OK)
233+
{
234+
m.erase(it);
235+
}
232236
}
233237
return result;
234238
}

exporters/etw/test/etw_provider_test.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ TEST(ETWProvider, ProviderIsRegisteredSuccessfully)
1818

1919
bool registered = etw.is_registered(providerName);
2020
ASSERT_TRUE(registered);
21+
etw.close(handle);
2122
}
2223

2324
TEST(ETWProvider, ProviderIsNotRegisteredSuccessfully)
@@ -46,17 +47,18 @@ TEST(ETWProvider, CheckOpenGUIDDataSuccessfully)
4647
auto guidStrName = uuid_name.to_string();
4748

4849
ASSERT_STREQ(guidStrHandle.c_str(), guidStrName.c_str());
50+
etw.close(handle);
4951
}
5052

5153
TEST(ETWProvider, CheckCloseSuccess)
5254
{
5355
std::string providerName = "OpenTelemetry-ETW-Provider";
5456

5557
static ETWProvider etw;
56-
auto handle = etw.open(providerName.c_str());
57-
58+
auto handle = etw.open(providerName.c_str(), ETWProvider::EventFormat::ETW_MANIFEST);
5859
auto result = etw.close(handle);
5960
ASSERT_NE(result, etw.STATUS_ERROR);
61+
ASSERT_FALSE(etw.is_registered(providerName));
6062
}
6163

6264
#endif

0 commit comments

Comments
 (0)