From e4ccf01d2375b5c514c85c81918f260558cddfa3 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 23 Apr 2026 13:27:43 +0800 Subject: [PATCH] address copilot review: wait for stale channel release before disposal; add barrier timeouts in tests --- .../Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ChannelPool.cs | 1 + .../Volo/Abp/RabbitMQ/ChannelPool_Tests.cs | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ChannelPool.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ChannelPool.cs index 7bf4fc5d9b..933e1bf005 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ChannelPool.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ChannelPool.cs @@ -92,6 +92,7 @@ public class ChannelPool : IChannelPool, ISingletonDependency { if (staleItem != null) { + staleItem.WaitIfInUse(TotalDisposeWaitDuration); await staleItem.DisposeAsync(); } } diff --git a/framework/test/Volo.Abp.RabbitMQ.Tests/Volo/Abp/RabbitMQ/ChannelPool_Tests.cs b/framework/test/Volo.Abp.RabbitMQ.Tests/Volo/Abp/RabbitMQ/ChannelPool_Tests.cs index 9e7b737d74..f631ce2d51 100644 --- a/framework/test/Volo.Abp.RabbitMQ.Tests/Volo/Abp/RabbitMQ/ChannelPool_Tests.cs +++ b/framework/test/Volo.Abp.RabbitMQ.Tests/Volo/Abp/RabbitMQ/ChannelPool_Tests.cs @@ -40,13 +40,13 @@ public class ChannelPool_Tests var firstCaller = Task.Run(async () => { - barrier.SignalAndWait(); + barrier.SignalAndWait(RaceTimeout); using var accessor = await channelPool.AcquireAsync("q"); }); var secondCaller = Task.Run(async () => { - barrier.SignalAndWait(); + barrier.SignalAndWait(RaceTimeout); await Task.Delay(50); using var accessor = await channelPool.AcquireAsync("q"); }); @@ -85,7 +85,7 @@ public class ChannelPool_Tests { tasks[i] = Task.Run(async () => { - barrier.SignalAndWait(); + barrier.SignalAndWait(RaceTimeout); using var accessor = await channelPool.AcquireAsync("q"); return accessor.Channel; }); @@ -292,7 +292,7 @@ public class ChannelPool_Tests { tasks[i] = Task.Run(async () => { - barrier.SignalAndWait(); + barrier.SignalAndWait(RaceTimeout); using var accessor = await channelPool.AcquireAsync("q"); return accessor.Channel; });