Commit 1dfc5d20 authored by Marc Gravell's avatar Marc Gravell

found more ways that things could fail to be completed (completion manager...

found more ways that things could fail to be completed (completion manager being null); use the awesome power of extension methods to fix that without a refactor
parent a149dfce
......@@ -3,8 +3,22 @@
namespace StackExchange.Redis
{
internal static class CompletionManagerHelpers
{
public static void CompleteSyncOrAsync(this PhysicalBridge bridge, ICompletable operation)
=> CompletionManager.CompleteSyncOrAsyncImpl(bridge?.completionManager, operation);
public static void CompleteSyncOrAsync(this CompletionManager manager, ICompletable operation)
=> CompletionManager.CompleteSyncOrAsyncImpl(manager, operation);
}
internal sealed partial class CompletionManager
{
internal static void CompleteSyncOrAsyncImpl(CompletionManager manager, ICompletable operation)
{
if (manager != null) manager.PerInstanceCompleteSyncOrAsync(operation);
else SharedCompleteSyncOrAsync(operation);
}
private readonly ConnectionMultiplexer multiplexer;
private readonly string name;
......@@ -16,7 +30,7 @@ public CompletionManager(ConnectionMultiplexer multiplexer, string name)
this.name = name;
}
internal static void SharedCompleteSyncOrAsync(ICompletable operation)
private static void SharedCompleteSyncOrAsync(ICompletable operation)
{
if (operation == null) return;
if (!operation.TryComplete(false))
......@@ -24,7 +38,7 @@ internal static void SharedCompleteSyncOrAsync(ICompletable operation)
SocketManager.Shared.ScheduleTask(s_AnyOrderCompletionHandler, operation);
}
}
public void CompleteSyncOrAsync(ICompletable operation)
private void PerInstanceCompleteSyncOrAsync(ICompletable operation)
{
if (operation == null) return;
if (operation.TryComplete(false))
......
......@@ -9,11 +9,6 @@
namespace StackExchange.Redis
{
internal static class PhysicalBridgeHelpers
{
public static void CompleteSyncOrAsync(this PhysicalBridge bridge, ICompletable operation)
=> PhysicalBridge.CompleteSyncOrAsyncImpl(bridge, operation);
}
internal sealed partial class PhysicalBridge : IDisposable
{
internal readonly string Name;
......@@ -24,7 +19,7 @@ internal sealed partial class PhysicalBridge : IDisposable
private static readonly Message ReusableAskingCommand = Message.Create(-1, CommandFlags.FireAndForget, RedisCommand.ASKING);
private readonly CompletionManager completionManager;
internal readonly CompletionManager completionManager;
private readonly long[] profileLog = new long[ProfileLogSamples];
private readonly Queue<Message> _preconnectBacklog = new Queue<Message>();
......@@ -91,13 +86,6 @@ public long SubscriptionCount
internal long OperationCount => Interlocked.Read(ref operationCount);
internal static void CompleteSyncOrAsyncImpl(PhysicalBridge bridge, ICompletable operation)
{
var manager = bridge?.completionManager;
if (manager != null) manager.CompleteSyncOrAsync(operation);
else CompletionManager.SharedCompleteSyncOrAsync(operation);
}
public void Dispose()
{
isDisposed = true;
......
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