diff --git a/src/StackExchange.Redis/PhysicalBridge.cs b/src/StackExchange.Redis/PhysicalBridge.cs index 2648e115a..4e07a4bf1 100644 --- a/src/StackExchange.Redis/PhysicalBridge.cs +++ b/src/StackExchange.Redis/PhysicalBridge.cs @@ -737,12 +737,15 @@ internal WriteResult WriteMessageTakingWriteLockSync(PhysicalConnection physical #pragma warning restore CS0618 } - UnmarkActiveMessage(message); physical.SetIdle(); return result; } catch (Exception ex) { return HandleWriteException(message, ex); } - finally { token.Dispose(); } + finally + { + UnmarkActiveMessage(message); + token.Dispose(); + } } @@ -887,7 +890,6 @@ private void ProcessBacklog() } _backlogStatus = BacklogStatus.MarkingInactive; - UnmarkActiveMessage(message); if (result != WriteResult.Success) { _backlogStatus = BacklogStatus.RecordingWriteFailure; @@ -901,6 +903,10 @@ private void ProcessBacklog() _backlogStatus = BacklogStatus.RecordingFault; HandleWriteException(message, ex); } + finally + { + UnmarkActiveMessage(message); + } } _backlogStatus = BacklogStatus.SettingIdle; physical.SetIdle(); @@ -985,8 +991,7 @@ internal ValueTask WriteMessageTakingWriteLockAsync(PhysicalConnect result = flush.Result; // we know it was completed, this is fine } - - UnmarkActiveMessage(message); + physical.SetIdle(); return new ValueTask(result); @@ -994,12 +999,17 @@ internal ValueTask WriteMessageTakingWriteLockAsync(PhysicalConnect catch (Exception ex) { return new ValueTask(HandleWriteException(message, ex)); } finally { - if (releaseLock & token.Success) + if (token.Success) { + UnmarkActiveMessage(message); + + if (releaseLock) + { #if DEBUG - RecordLockDuration(lockTaken); + RecordLockDuration(lockTaken); #endif - token.Dispose(); + token.Dispose(); + } } } } @@ -1029,8 +1039,7 @@ private async ValueTask WriteMessageTakingWriteLockAsync_Awaited(Va { result = await physical.FlushAsync(false).ForAwait(); } - - UnmarkActiveMessage(message); + physical.SetIdle(); #if DEBUG @@ -1043,6 +1052,10 @@ private async ValueTask WriteMessageTakingWriteLockAsync_Awaited(Va { return HandleWriteException(message, ex); } + finally + { + UnmarkActiveMessage(message); + } } private async ValueTask CompleteWriteAndReleaseLockAsync(LockToken lockToken, ValueTask flush, Message message, int lockTaken) @@ -1052,7 +1065,6 @@ private async ValueTask CompleteWriteAndReleaseLockAsync(LockToken try { var result = await flush.ForAwait(); - UnmarkActiveMessage(message); physical.SetIdle(); return result; }