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() ...@@ -1004,6 +1004,5 @@ public async Task WatchAbort_HashLengthEqual()
await Assert.ThrowsAsync<TaskCanceledException>(() => pong); await Assert.ThrowsAsync<TaskCanceledException>(() => pong);
} }
} }
} }
} }
...@@ -530,7 +530,7 @@ internal bool TryEnqueue(List<Message> messages, bool isSlave) ...@@ -530,7 +530,7 @@ internal bool TryEnqueue(List<Message> messages, bool isSlave)
return true; return true;
} }
private readonly object WriteLock = new object(); private readonly object SingleWriterLock = new object();
/// <summary> /// <summary>
/// This writes a message to the output stream /// This writes a message to the output stream
...@@ -544,16 +544,17 @@ internal WriteResult WriteMessageTakingWriteLock(PhysicalConnection physical, Me ...@@ -544,16 +544,17 @@ internal WriteResult WriteMessageTakingWriteLock(PhysicalConnection physical, Me
WriteResult result; WriteResult result;
bool haveLock = false; bool haveLock = false;
Monitor.TryEnter(WriteLock, TimeoutMilliseconds, ref haveLock);
if (!haveLock)
{
message.Cancel();
Multiplexer?.OnMessageFaulted(message, null);
this.CompleteSyncOrAsync(message);
return WriteResult.TimeoutBeforeWrite;
}
try try
{ {
Monitor.TryEnter(SingleWriterLock, TimeoutMilliseconds, ref haveLock);
if (!haveLock)
{
message.Cancel();
Multiplexer?.OnMessageFaulted(message, null);
this.CompleteSyncOrAsync(message);
return WriteResult.TimeoutBeforeWrite;
}
var messageIsSent = false; var messageIsSent = false;
if (message is IMultiMessage) if (message is IMultiMessage)
{ {
...@@ -589,7 +590,7 @@ internal WriteResult WriteMessageTakingWriteLock(PhysicalConnection physical, Me ...@@ -589,7 +590,7 @@ internal WriteResult WriteMessageTakingWriteLock(PhysicalConnection physical, Me
} }
finally finally
{ {
if (haveLock) Monitor.Exit(WriteLock); if (haveLock) Monitor.Exit(SingleWriterLock);
} }
return result; 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