internal void IncrementSubscribe(IHandlerHolderMarker handlerHolder, IDisposable subscription) { Interlocked.Increment(ref subscribeCount); if (options.EnableCaptureStackTrace) { AddStackTrace(handlerHolder, subscription); } dirty = true; }
internal void RemoveTargetDiagnostics(IHandlerHolderMarker targetHolder, int removeCount) { Interlocked.Add(ref subscribeCount, -removeCount); if (enableCaptureStackTrace) { lock (gate) { capturedStackTraces.Remove(targetHolder); } } }
void RemoveStackTrace(IHandlerHolderMarker handlerHolder, IDisposable subscription) { lock (gate) { if (!capturedStackTraces.TryGetValue(handlerHolder, out var dict)) { return; } dict.Remove(subscription); } }
void AddStackTrace(IHandlerHolderMarker handlerHolder, IDisposable subscription) { lock (gate) { if (!capturedStackTraces.TryGetValue(handlerHolder, out var dict)) { dict = new Dictionary <IDisposable, StackTraceInfo>(); capturedStackTraces[handlerHolder] = dict; } dict.Add(subscription, new StackTraceInfo(new StackTrace(true))); } }