Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix race condition in MainMonitor #830

Merged
merged 10 commits into from
Nov 27, 2024
11 changes: 10 additions & 1 deletion libs/server/Metrics/Latency/GarnetLatencyMetricsSession.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ internal sealed class GarnetLatencyMetricsSession
public int PriorVersion => 1 - Version;
public LatencyMetricsEntrySession[] metrics;

private SingleWriterMultiReaderLock disposeLock;

public GarnetLatencyMetricsSession(GarnetServerMonitor monitor)
{
this.monitor = monitor;
Expand All @@ -30,7 +32,9 @@ public void Return()
{
metrics[(int)cmd].Return();
}
disposeLock.WriteLock();
vazois marked this conversation as resolved.
Show resolved Hide resolved
metrics = null;
disposeLock.WriteUnlock();
}

private void Init()
Expand Down Expand Up @@ -80,7 +84,12 @@ public void ResetAll()
public void Reset(LatencyMetricsType cmd)
{
int idx = (int)cmd;
metrics[idx].latency[PriorVersion].Reset();
disposeLock.WriteLock();
vazois marked this conversation as resolved.
Show resolved Hide resolved
if (metrics != null)
{
metrics[idx].latency[PriorVersion].Reset();
}
disposeLock.WriteUnlock();
}
}
}