Skip to content

Commit

Permalink
Added locking to request tracing session creation
Browse files Browse the repository at this point in the history
  • Loading branch information
grumpydev committed Feb 7, 2012
1 parent 0256a70 commit 221ab08
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions src/Nancy/Diagnostics/DefaultRequestTracing.cs
Expand Up @@ -6,21 +6,30 @@ namespace Nancy.Diagnostics

public class DefaultRequestTracing : IRequestTracing
{
private readonly object diagsLock = new object();

private IList<RequestTraceSession> sessions = new List<RequestTraceSession>();

public Guid CreateSession()
{
var id = Guid.NewGuid();

this.sessions.Add(new RequestTraceSession(id));
lock (this.diagsLock)
{
this.sessions.Add(new RequestTraceSession(id));
}

return id;
}

// TODO - remove above method and return guid from here?
public void AddRequestDiagnosticToSession(Guid sessionId, NancyContext context)
{
var session = this.sessions.FirstOrDefault(s => s.Id == sessionId);
RequestTraceSession session;
lock (this.diagsLock)
{
session = this.sessions.FirstOrDefault(s => s.Id == sessionId);
}

if (session == null)
{
Expand All @@ -32,17 +41,26 @@ public void AddRequestDiagnosticToSession(Guid sessionId, NancyContext context)

public IEnumerable<RequestTraceSession> GetSessions()
{
return this.sessions;
lock (this.diagsLock)
{
return this.sessions;
}
}

public void Clear()
{
this.sessions.Clear();
lock (this.diagsLock)
{
this.sessions.Clear();
}
}

public bool IsValidSessionId(Guid sessionId)
{
return this.sessions.Any(s => s.Id == sessionId);
lock (this.diagsLock)
{
return this.sessions.Any(s => s.Id == sessionId);
}
}
}
}

0 comments on commit 221ab08

Please sign in to comment.