Commit 07c16dd4 authored by Marc Gravell's avatar Marc Gravell

tidy up the write lock code (no functional change, just... more correct)

parent bb2a551e
......@@ -1004,6 +1004,5 @@ public async Task WatchAbort_HashLengthEqual()
await Assert.ThrowsAsync<TaskCanceledException>(() => pong);
}
}
}
}
......@@ -530,7 +530,7 @@ internal bool TryEnqueue(List<Message> messages, bool isSlave)
return true;
}
private readonly object WriteLock = new object();
private readonly object SingleWriterLock = new object();
/// <summary>
/// This writes a message to the output stream
......@@ -544,16 +544,17 @@ internal WriteResult WriteMessageTakingWriteLock(PhysicalConnection physical, Me
WriteResult result;
bool haveLock = false;
Monitor.TryEnter(WriteLock, TimeoutMilliseconds, ref haveLock);
if (!haveLock)
{
message.Cancel();
Multiplexer?.OnMessageFaulted(message, null);
this.CompleteSyncOrAsync(message);
return WriteResult.TimeoutBeforeWrite;
}
try
{
Monitor.TryEnter(SingleWriterLock, TimeoutMilliseconds, ref haveLock);
if (!haveLock)
{
message.Cancel();
Multiplexer?.OnMessageFaulted(message, null);
this.CompleteSyncOrAsync(message);
return WriteResult.TimeoutBeforeWrite;
}
var messageIsSent = false;
if (message is IMultiMessage)
{
......@@ -589,7 +590,7 @@ internal WriteResult WriteMessageTakingWriteLock(PhysicalConnection physical, Me
}
finally
{
if (haveLock) Monitor.Exit(WriteLock);
if (haveLock) Monitor.Exit(SingleWriterLock);
}
return result;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment