Skip to content

Commit 0b80ed3

Browse files
committed
* Standardize on _disposedValue name.
* Ensure `_disposedValue` is set in `finally` block.
1 parent 182716d commit 0b80ed3

File tree

7 files changed

+122
-74
lines changed

7 files changed

+122
-74
lines changed

projects/RabbitMQ.Client/ConsumerDispatching/ConsumerDispatcherChannelBase.cs

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ internal abstract class ConsumerDispatcherChannelBase : ConsumerDispatcherBase,
4545
private readonly Task _worker;
4646
private readonly ushort _concurrency;
4747
private bool _quiesce = false;
48-
private bool _disposed;
48+
private bool _disposedValue;
4949

5050
internal ConsumerDispatcherChannelBase(Impl.Channel channel, ushort concurrency)
5151
{
@@ -85,7 +85,7 @@ internal ConsumerDispatcherChannelBase(Impl.Channel channel, ushort concurrency)
8585

8686
public ValueTask HandleBasicConsumeOkAsync(IAsyncBasicConsumer consumer, string consumerTag, CancellationToken cancellationToken)
8787
{
88-
if (false == _disposed && false == _quiesce)
88+
if (false == _disposedValue && false == _quiesce)
8989
{
9090
AddConsumer(consumer, consumerTag);
9191
WorkStruct work = WorkStruct.CreateConsumeOk(consumer, consumerTag);
@@ -101,7 +101,7 @@ public ValueTask HandleBasicDeliverAsync(string consumerTag, ulong deliveryTag,
101101
string exchange, string routingKey, IReadOnlyBasicProperties basicProperties, RentedMemory body,
102102
CancellationToken cancellationToken)
103103
{
104-
if (false == _disposed && false == _quiesce)
104+
if (false == _disposedValue && false == _quiesce)
105105
{
106106
IAsyncBasicConsumer consumer = GetConsumerOrDefault(consumerTag);
107107
var work = WorkStruct.CreateDeliver(consumer, consumerTag, deliveryTag, redelivered, exchange, routingKey, basicProperties, body);
@@ -115,7 +115,7 @@ public ValueTask HandleBasicDeliverAsync(string consumerTag, ulong deliveryTag,
115115

116116
public ValueTask HandleBasicCancelOkAsync(string consumerTag, CancellationToken cancellationToken)
117117
{
118-
if (false == _disposed && false == _quiesce)
118+
if (false == _disposedValue && false == _quiesce)
119119
{
120120
IAsyncBasicConsumer consumer = GetAndRemoveConsumer(consumerTag);
121121
WorkStruct work = WorkStruct.CreateCancelOk(consumer, consumerTag);
@@ -129,7 +129,7 @@ public ValueTask HandleBasicCancelOkAsync(string consumerTag, CancellationToken
129129

130130
public ValueTask HandleBasicCancelAsync(string consumerTag, CancellationToken cancellationToken)
131131
{
132-
if (false == _disposed && false == _quiesce)
132+
if (false == _disposedValue && false == _quiesce)
133133
{
134134
IAsyncBasicConsumer consumer = GetAndRemoveConsumer(consumerTag);
135135
WorkStruct work = WorkStruct.CreateCancel(consumer, consumerTag);
@@ -148,7 +148,7 @@ public void Quiesce()
148148

149149
public async Task WaitForShutdownAsync()
150150
{
151-
if (_disposed)
151+
if (_disposedValue)
152152
{
153153
return;
154154
}
@@ -202,6 +202,15 @@ protected override Task InternalShutdownAsync()
202202

203203
protected abstract Task ProcessChannelAsync();
204204

205+
protected enum WorkType : byte
206+
{
207+
Shutdown,
208+
Cancel,
209+
CancelOk,
210+
Deliver,
211+
ConsumeOk
212+
}
213+
205214
protected readonly struct WorkStruct : IDisposable
206215
{
207216
public readonly IAsyncBasicConsumer Consumer;
@@ -276,42 +285,35 @@ public static WorkStruct CreateDeliver(IAsyncBasicConsumer consumer, string cons
276285
public void Dispose() => Body.Dispose();
277286
}
278287

279-
protected enum WorkType : byte
288+
public void Dispose()
280289
{
281-
Shutdown,
282-
Cancel,
283-
CancelOk,
284-
Deliver,
285-
ConsumeOk
290+
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
291+
Dispose(disposing: true);
292+
GC.SuppressFinalize(this);
286293
}
287294

288295
protected virtual void Dispose(bool disposing)
289296
{
290-
if (!_disposed)
297+
if (_disposedValue)
291298
{
292-
try
293-
{
294-
if (disposing)
295-
{
296-
Quiesce();
297-
}
298-
}
299-
catch
300-
{
301-
// CHOMP
302-
}
303-
finally
299+
return;
300+
}
301+
302+
try
303+
{
304+
if (disposing)
304305
{
305-
_disposed = true;
306+
Quiesce();
306307
}
307308
}
308-
}
309-
310-
public void Dispose()
311-
{
312-
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
313-
Dispose(disposing: true);
314-
GC.SuppressFinalize(this);
309+
catch
310+
{
311+
// CHOMP
312+
}
313+
finally
314+
{
315+
_disposedValue = true;
316+
}
315317
}
316318
}
317319
}

projects/RabbitMQ.Client/Impl/AutorecoveringChannel.cs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ internal sealed class AutorecoveringChannel : IChannel, IRecoverable
4747

4848
private AutorecoveringConnection _connection;
4949
private RecoveryAwareChannel _innerChannel;
50-
private bool _disposed;
50+
private bool _disposedValue;
5151

5252
private ushort _prefetchCountConsumer;
5353
private ushort _prefetchCountGlobal;
@@ -143,7 +143,7 @@ public IAsyncBasicConsumer? DefaultConsumer
143143

144144
public bool IsClosed => !IsOpen;
145145

146-
public bool IsOpen => !_disposed && _innerChannel.IsOpen;
146+
public bool IsOpen => !_disposedValue && _innerChannel.IsOpen;
147147

148148
public string? CurrentQueue => InnerChannel.CurrentQueue;
149149

@@ -155,7 +155,7 @@ internal async Task<bool> AutomaticallyRecoverAsync(AutorecoveringConnection con
155155
throw new InvalidOperationException("recordedEntitiesSemaphore must be held");
156156
}
157157

158-
if (_disposed)
158+
if (_disposedValue)
159159
{
160160
return false;
161161
}
@@ -192,7 +192,7 @@ await newChannel.TxSelectAsync(cancellationToken)
192192
* with the resulting basic.ack never getting sent out.
193193
*/
194194

195-
if (_disposed)
195+
if (_disposedValue)
196196
{
197197
await newChannel.AbortAsync(CancellationToken.None)
198198
.ConfigureAwait(false);
@@ -252,23 +252,37 @@ await _connection.DeleteRecordedChannelAsync(this,
252252
public override string ToString()
253253
=> InnerChannel.ToString();
254254

255-
public void Dispose() => DisposeAsync().AsTask().GetAwaiter().GetResult();
255+
public void Dispose()
256+
{
257+
if (_disposedValue)
258+
{
259+
return;
260+
}
261+
262+
DisposeAsync().AsTask().GetAwaiter().GetResult();
263+
}
256264

257265
public async ValueTask DisposeAsync()
258266
{
259-
if (_disposed)
267+
if (_disposedValue)
260268
{
261269
return;
262270
}
263271

264-
if (IsOpen)
272+
try
265273
{
266-
await this.AbortAsync()
267-
.ConfigureAwait(false);
268-
}
274+
if (IsOpen)
275+
{
276+
await this.AbortAsync()
277+
.ConfigureAwait(false);
278+
}
269279

270-
_recordedConsumerTags.Clear();
271-
_disposed = true;
280+
_recordedConsumerTags.Clear();
281+
}
282+
finally
283+
{
284+
_disposedValue = true;
285+
}
272286
}
273287

274288
public ValueTask<ulong> GetNextPublishSequenceNumberAsync(CancellationToken cancellationToken = default) => InnerChannel.GetNextPublishSequenceNumberAsync(cancellationToken);
@@ -477,7 +491,7 @@ public Task TxSelectAsync(CancellationToken cancellationToken)
477491
[MethodImpl(MethodImplOptions.AggressiveInlining)]
478492
private void ThrowIfDisposed()
479493
{
480-
if (_disposed)
494+
if (_disposedValue)
481495
{
482496
ThrowDisposed();
483497
}

projects/RabbitMQ.Client/Impl/AutorecoveringConnection.Recording.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ internal sealed partial class AutorecoveringConnection
5353
internal async ValueTask RecordExchangeAsync(RecordedExchange exchange,
5454
bool recordedEntitiesSemaphoreHeld)
5555
{
56-
if (_disposed)
56+
if (_disposedValue)
5757
{
5858
return;
5959
}
@@ -85,7 +85,7 @@ private void DoRecordExchange(in RecordedExchange exchange)
8585
internal async ValueTask DeleteRecordedExchangeAsync(string exchangeName,
8686
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
8787
{
88-
if (_disposed)
88+
if (_disposedValue)
8989
{
9090
return;
9191
}
@@ -133,7 +133,7 @@ await DeleteAutoDeleteExchangeAsync(binding.Source,
133133
internal async ValueTask DeleteAutoDeleteExchangeAsync(string exchangeName,
134134
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
135135
{
136-
if (_disposed)
136+
if (_disposedValue)
137137
{
138138
return;
139139
}
@@ -187,7 +187,7 @@ bool AnyBindingsOnExchange(string exchange)
187187
internal async ValueTask RecordQueueAsync(RecordedQueue queue,
188188
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
189189
{
190-
if (_disposed)
190+
if (_disposedValue)
191191
{
192192
return;
193193
}
@@ -219,7 +219,7 @@ private void DoRecordQueue(RecordedQueue queue)
219219
internal async ValueTask DeleteRecordedQueueAsync(string queueName,
220220
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
221221
{
222-
if (_disposed)
222+
if (_disposedValue)
223223
{
224224
return;
225225
}
@@ -268,7 +268,7 @@ await DeleteAutoDeleteExchangeAsync(binding.Source,
268268
internal async ValueTask RecordBindingAsync(RecordedBinding binding,
269269
bool recordedEntitiesSemaphoreHeld)
270270
{
271-
if (_disposed)
271+
if (_disposedValue)
272272
{
273273
return;
274274
}
@@ -300,7 +300,7 @@ private void DoRecordBinding(in RecordedBinding binding)
300300
internal async ValueTask DeleteRecordedBindingAsync(RecordedBinding rb,
301301
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
302302
{
303-
if (_disposed)
303+
if (_disposedValue)
304304
{
305305
return;
306306
}
@@ -332,7 +332,7 @@ private void DoDeleteRecordedBinding(in RecordedBinding rb)
332332
internal async ValueTask RecordConsumerAsync(RecordedConsumer consumer,
333333
bool recordedEntitiesSemaphoreHeld)
334334
{
335-
if (_disposed)
335+
if (_disposedValue)
336336
{
337337
return;
338338
}
@@ -369,7 +369,7 @@ private void DoRecordConsumer(in RecordedConsumer consumer)
369369
internal async ValueTask DeleteRecordedConsumerAsync(string consumerTag,
370370
bool recordedEntitiesSemaphoreHeld)
371371
{
372-
if (_disposed)
372+
if (_disposedValue)
373373
{
374374
return;
375375
}
@@ -466,7 +466,7 @@ private void DoAddRecordedChannel(AutorecoveringChannel channel)
466466
internal async Task DeleteRecordedChannelAsync(AutorecoveringChannel channel,
467467
bool channelsSemaphoreHeld, bool recordedEntitiesSemaphoreHeld)
468468
{
469-
if (_disposed)
469+
if (_disposedValue)
470470
{
471471
return;
472472
}

projects/RabbitMQ.Client/Impl/AutorecoveringConnection.Recovery.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ await maybeNewInnerConnection.OpenAsync(cancellationToken)
285285
private async ValueTask RecoverExchangesAsync(IConnection connection,
286286
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
287287
{
288-
if (_disposed)
288+
if (_disposedValue)
289289
{
290290
return;
291291
}
@@ -337,7 +337,7 @@ await _recordedEntitiesSemaphore.WaitAsync(cancellationToken)
337337
private async Task RecoverQueuesAsync(IConnection connection,
338338
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
339339
{
340-
if (_disposed)
340+
if (_disposedValue)
341341
{
342342
return;
343343
}
@@ -451,7 +451,7 @@ void UpdateConsumerQueue(string oldName, string newName)
451451
private async ValueTask RecoverBindingsAsync(IConnection connection,
452452
bool recordedEntitiesSemaphoreHeld, CancellationToken cancellationToken)
453453
{
454-
if (_disposed)
454+
if (_disposedValue)
455455
{
456456
return;
457457
}
@@ -503,7 +503,7 @@ await _recordedEntitiesSemaphore.WaitAsync(cancellationToken)
503503
internal async ValueTask RecoverConsumersAsync(AutorecoveringChannel channelToRecover, IChannel channelToUse,
504504
bool recordedEntitiesSemaphoreHeld = false, CancellationToken cancellationToken = default)
505505
{
506-
if (_disposed)
506+
if (_disposedValue)
507507
{
508508
return;
509509
}

0 commit comments

Comments
 (0)