Skip to content

Commit d0d5816

Browse files
Merge pull request #166 from rabbitmq/rabbitmq-dotnet-client-144
Do not duplicate consumer shutdown event.
2 parents 97b1fe0 + 932443d commit d0d5816

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

projects/client/RabbitMQ.Client.WinRT/RabbitMQ.Client.WinRT.csproj

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
<?xml version="1.0" encoding="utf-8"?>
2-
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<Import Project="$(MSBuildProjectDirectory)\..\..\..\Local.props" />
44
<!-- MSBuild Community Tasks -->
55
<PropertyGroup>
66
<MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\..\..\..\lib\MSBuild.Community.Tasks\</MSBuildCommunityTasksPath>
7+
<TargetPlatformVersion>8.1</TargetPlatformVersion>
8+
<MinimumVisualStudioVersion>12</MinimumVisualStudioVersion>
79
</PropertyGroup>
810
<Import Project="$(MSBuildCommunityTasksPath)MSBuild.Community.Tasks.Targets" />
911
<!-- Gensrc dir -->
@@ -557,11 +559,11 @@
557559
</Target>
558560
<!-- Microsoft Windows 8 CSharp targets -->
559561
<Import Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets')" Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
560-
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '11.0' ">
561-
<VisualStudioVersion>11.0</VisualStudioVersion>
562+
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0' ">
563+
<VisualStudioVersion>12.0</VisualStudioVersion>
562564
</PropertyGroup>
563565
<!-- Custom BeforeBuild-->
564566
<Target Name="BeforeBuild" DependsOnTargets="GenerateApi; Detokenize" />
565567
<!-- Custom BeforeClean -->
566568
<Target Name="BeforeClean" DependsOnTargets="CleanGenerateApi; CleanDetokenize" />
567-
</Project>
569+
</Project>

projects/client/RabbitMQ.Client/src/client/impl/ModelBase.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1181,7 +1181,6 @@ public string BasicConsume(string queue,
11811181
IDictionary<string, object> arguments,
11821182
IBasicConsumer consumer)
11831183
{
1184-
ModelShutdown += consumer.HandleModelShutdown;
11851184

11861185
var k = new BasicConsumerRpcContinuation { m_consumer = consumer };
11871186

projects/client/Unit/src/unit/TestConsumerOperationDispatch.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,28 +180,38 @@ public void TestChannelShutdownDoesNotShutDownDispatcher()
180180
private class ShutdownLatchConsumer : DefaultBasicConsumer
181181
{
182182
public ManualResetEvent Latch { get; private set; }
183+
public ManualResetEvent DuplicateLatch { get; private set; }
183184

184-
public ShutdownLatchConsumer(ManualResetEvent latch)
185+
public ShutdownLatchConsumer(ManualResetEvent latch, ManualResetEvent duplicateLatch)
185186
{
186187
this.Latch = latch;
188+
this.DuplicateLatch = duplicateLatch;
187189
}
188190

189191
public override void HandleModelShutdown(object model, ShutdownEventArgs reason)
190192
{
191-
this.Latch.Set();
193+
// keep track of duplicates
194+
if (this.Latch.WaitOne(0)){
195+
this.DuplicateLatch.Set();
196+
} else {
197+
this.Latch.Set();
198+
}
192199
}
193200
}
194201

195202
[Test]
196203
public void TestModelShutdownHandler()
197204
{
198205
var latch = new ManualResetEvent(false);
206+
var duplicateLatch = new ManualResetEvent(false);
199207
var q = this.Model.QueueDeclare().QueueName;
200-
var c = new ShutdownLatchConsumer(latch);
208+
var c = new ShutdownLatchConsumer(latch, duplicateLatch);
201209

202210
this.Model.BasicConsume(queue: q, noAck: true, consumer: c);
203211
this.Model.Close();
204212
Wait(latch, TimeSpan.FromSeconds(5));
213+
Assert.IsFalse(duplicateLatch.WaitOne(TimeSpan.FromSeconds(5)),
214+
"event handler fired more than once");
205215
}
206216
}
207217
}

0 commit comments

Comments
 (0)