Skip to content

Commit 1300704

Browse files
author
Nazmi Altun
authored
Event that has been subscribed to EventSourceCreated should be unsubscribed to avoid memory leak. (#29)
1 parent 31ede88 commit 1300704

File tree

1 file changed

+18
-20
lines changed

1 file changed

+18
-20
lines changed
Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1+
using Prometheus.DotNetRuntime.StatsCollectors.Util;
12
using System;
2-
using System.Collections.Generic;
3-
using System.Collections.Immutable;
43
using System.Diagnostics;
54
using System.Diagnostics.Tracing;
6-
using System.Linq;
7-
using Prometheus.DotNetRuntime.StatsCollectors;
8-
using Prometheus.DotNetRuntime.StatsCollectors.Util;
95

106
namespace Prometheus.DotNetRuntime
117
{
@@ -24,32 +20,28 @@ internal DotNetEventListener(IEventSourceStatsCollector collector, Action<Except
2420
_collector = collector;
2521
_errorHandler = errorHandler;
2622
_enableDebugging = enableDebugging;
27-
23+
2824
if (_enableDebugging)
2925
{
3026
_eventTypeCounts ??= Metrics.CreateCounter($"dotnet_debug_events_total", "The total number of .NET diagnostic events processed", "collector_name", "event_source_name", "event_name");
3127
_cpuConsumed ??= Metrics.CreateCounter("dotnet_debug_cpu_seconds_total", "The total CPU time consumed by processing .NET diagnostic events (does not include the CPU cost to generate the events)", "collector_name", "event_source_name", "event_name");
3228
_nameSnakeCase = collector.GetType().Name.ToSnakeCase();
3329
}
34-
35-
EnableEventSources(collector);
30+
EventSourceCreated += OnEventSourceCreated;
3631
}
37-
32+
3833
internal bool StartedReceivingEvents { get; private set; }
3934

40-
private void EnableEventSources(IEventSourceStatsCollector forCollector)
35+
private void OnEventSourceCreated(object sender, EventSourceCreatedEventArgs e)
4136
{
42-
EventSourceCreated += (sender, e) =>
37+
var es = e.EventSource;
38+
if (es.Guid == _collector.EventSourceGuid)
4339
{
44-
var es = e.EventSource;
45-
if (es.Guid == forCollector.EventSourceGuid)
46-
{
47-
EnableEvents(es, forCollector.Level, forCollector.Keywords);
48-
StartedReceivingEvents = true;
49-
}
50-
};
40+
EnableEvents(es, _collector.Level, _collector.Keywords);
41+
StartedReceivingEvents = true;
42+
}
5143
}
52-
44+
5345
protected override void OnEventWritten(EventWrittenEventArgs eventData)
5446
{
5547
var sp = new Stopwatch();
@@ -60,7 +52,7 @@ protected override void OnEventWritten(EventWrittenEventArgs eventData)
6052
_eventTypeCounts.Labels(_nameSnakeCase, eventData.EventSource.Name, eventData.EventName).Inc();
6153
sp.Restart();
6254
}
63-
55+
6456
_collector.ProcessEvent(eventData);
6557

6658
if (_enableDebugging)
@@ -74,5 +66,11 @@ protected override void OnEventWritten(EventWrittenEventArgs eventData)
7466
_errorHandler(e);
7567
}
7668
}
69+
70+
public override void Dispose()
71+
{
72+
EventSourceCreated -= OnEventSourceCreated;
73+
base.Dispose();
74+
}
7775
}
7876
}

0 commit comments

Comments
 (0)