@@ -76,8 +76,7 @@ public class AutorecoveringConnection : IConnection, IRecoverable
76
76
private ConcurrentDictionary < RecordedBinding , byte > m_recordedBindings =
77
77
new ConcurrentDictionary < RecordedBinding , byte > ( ) ;
78
78
79
- private List < EventHandler < ConnectionBlockedEventArgs > > m_recordedBlockedEventHandlers =
80
- new List < EventHandler < ConnectionBlockedEventArgs > > ( ) ;
79
+ private EventHandler < ConnectionBlockedEventArgs > m_recordedBlockedEventHandlers ;
81
80
82
81
private IDictionary < string , RecordedConsumer > m_recordedConsumers =
83
82
new ConcurrentDictionary < string , RecordedConsumer > ( ) ;
@@ -88,16 +87,11 @@ public class AutorecoveringConnection : IConnection, IRecoverable
88
87
private IDictionary < string , RecordedQueue > m_recordedQueues =
89
88
new ConcurrentDictionary < string , RecordedQueue > ( ) ;
90
89
91
- private List < EventHandler < ShutdownEventArgs > > m_recordedShutdownEventHandlers =
92
- new List < EventHandler < ShutdownEventArgs > > ( ) ;
93
-
94
- private List < EventHandler < EventArgs > > m_recordedUnblockedEventHandlers =
95
- new List < EventHandler < EventArgs > > ( ) ;
96
-
90
+ private EventHandler < ShutdownEventArgs > m_recordedShutdownEventHandlers ;
91
+ private EventHandler < EventArgs > m_recordedUnblockedEventHandlers ;
97
92
private EventHandler < ConsumerTagChangedAfterRecoveryEventArgs > m_consumerTagChange ;
98
93
private EventHandler < QueueNameChangedAfterRecoveryEventArgs > m_queueNameChange ;
99
94
private EventHandler < EventArgs > m_recovery ;
100
-
101
95
private EventHandler < ConnectionRecoveryErrorEventArgs > m_connectionRecoveryError ;
102
96
103
97
public AutorecoveringConnection ( ConnectionFactory factory , string clientProvidedName = null )
@@ -183,15 +177,15 @@ public event EventHandler<ConnectionBlockedEventArgs> ConnectionBlocked
183
177
{
184
178
lock ( m_eventLock )
185
179
{
186
- m_recordedBlockedEventHandlers . Add ( value ) ;
180
+ m_recordedBlockedEventHandlers += value ;
187
181
m_delegate . ConnectionBlocked += value ;
188
182
}
189
183
}
190
184
remove
191
185
{
192
186
lock ( m_eventLock )
193
187
{
194
- m_recordedBlockedEventHandlers . Remove ( value ) ;
188
+ m_recordedBlockedEventHandlers -= value ;
195
189
m_delegate . ConnectionBlocked -= value ;
196
190
}
197
191
}
@@ -203,15 +197,15 @@ public event EventHandler<ShutdownEventArgs> ConnectionShutdown
203
197
{
204
198
lock ( m_eventLock )
205
199
{
206
- m_recordedShutdownEventHandlers . Add ( value ) ;
200
+ m_recordedShutdownEventHandlers += value ;
207
201
m_delegate . ConnectionShutdown += value ;
208
202
}
209
203
}
210
204
remove
211
205
{
212
206
lock ( m_eventLock )
213
207
{
214
- m_recordedShutdownEventHandlers . Remove ( value ) ;
208
+ m_recordedShutdownEventHandlers -= value ;
215
209
m_delegate . ConnectionShutdown -= value ;
216
210
}
217
211
}
@@ -223,15 +217,15 @@ public event EventHandler<EventArgs> ConnectionUnblocked
223
217
{
224
218
lock ( m_eventLock )
225
219
{
226
- m_recordedUnblockedEventHandlers . Add ( value ) ;
220
+ m_recordedUnblockedEventHandlers += value ;
227
221
m_delegate . ConnectionUnblocked += value ;
228
222
}
229
223
}
230
224
remove
231
225
{
232
226
lock ( m_eventLock )
233
227
{
234
- m_recordedUnblockedEventHandlers . Remove ( value ) ;
228
+ m_recordedUnblockedEventHandlers -= value ;
235
229
m_delegate . ConnectionUnblocked -= value ;
236
230
}
237
231
}
@@ -492,7 +486,7 @@ public void DeleteRecordedExchange(string name)
492
486
// find bindings that need removal, check if some auto-delete exchanges
493
487
// might need the same
494
488
var bs = m_recordedBindings . Keys . Where ( b => name . Equals ( b . Destination ) ) ;
495
- foreach ( RecordedBinding b in bs )
489
+ foreach ( var b in bs )
496
490
{
497
491
DeleteRecordedBinding ( b ) ;
498
492
MaybeDeleteRecordedAutoDeleteExchange ( b . Source ) ;
@@ -508,7 +502,7 @@ public void DeleteRecordedQueue(string name)
508
502
// find bindings that need removal, check if some auto-delete exchanges
509
503
// might need the same
510
504
var bs = m_recordedBindings . Keys . Where ( b => name . Equals ( b . Destination ) ) ;
511
- foreach ( RecordedBinding b in bs )
505
+ foreach ( var b in bs )
512
506
{
513
507
DeleteRecordedBinding ( b ) ;
514
508
MaybeDeleteRecordedAutoDeleteExchange ( b . Source ) ;
@@ -651,10 +645,7 @@ private void Init(IFrameHandler fh)
651
645
lock ( m_eventLock )
652
646
{
653
647
ConnectionShutdown += recoveryListener ;
654
- if ( ! m_recordedShutdownEventHandlers . Contains ( recoveryListener ) )
655
- {
656
- m_recordedShutdownEventHandlers . Add ( recoveryListener ) ;
657
- }
648
+ m_recordedShutdownEventHandlers += recoveryListener ;
658
649
}
659
650
}
660
651
@@ -747,18 +738,32 @@ public void HandleConnectionUnblocked()
747
738
748
739
void IDisposable . Dispose ( )
749
740
{
750
- try
751
- {
752
- Abort ( ) ;
753
- }
754
- catch ( Exception )
755
- {
756
- // TODO: log
757
- }
758
- finally
741
+ Dispose ( true ) ;
742
+ }
743
+
744
+ protected virtual void Dispose ( bool disposing )
745
+ {
746
+ if ( disposing )
759
747
{
760
- m_models . Clear ( ) ;
748
+ // dispose managed resources
749
+ try
750
+ {
751
+ Abort ( ) ;
752
+ }
753
+ catch ( Exception )
754
+ {
755
+ // TODO: log
756
+ }
757
+ finally
758
+ {
759
+ m_models . Clear ( ) ;
760
+ m_recordedBlockedEventHandlers = null ;
761
+ m_recordedShutdownEventHandlers = null ;
762
+ m_recordedUnblockedEventHandlers = null ;
763
+ }
761
764
}
765
+
766
+ // dispose unmanaged resources
762
767
}
763
768
764
769
protected void EnsureIsOpen ( )
@@ -815,13 +820,9 @@ protected void RecoverBindings()
815
820
816
821
protected void RecoverConnectionBlockedHandlers ( )
817
822
{
818
- List < EventHandler < ConnectionBlockedEventArgs > > handler = m_recordedBlockedEventHandlers ;
819
- if ( handler != null )
823
+ lock ( m_eventLock )
820
824
{
821
- foreach ( EventHandler < ConnectionBlockedEventArgs > eh in handler )
822
- {
823
- m_delegate . ConnectionBlocked += eh ;
824
- }
825
+ m_delegate . ConnectionBlocked += m_recordedBlockedEventHandlers ;
825
826
}
826
827
}
827
828
@@ -871,22 +872,12 @@ protected bool RecoverConnectionDelegate()
871
872
872
873
protected void RecoverConnectionShutdownHandlers ( )
873
874
{
874
- foreach ( EventHandler < ShutdownEventArgs > eh in m_recordedShutdownEventHandlers )
875
- {
876
- m_delegate . ConnectionShutdown += eh ;
877
- }
875
+ m_delegate . ConnectionShutdown += m_recordedShutdownEventHandlers ;
878
876
}
879
877
880
878
protected void RecoverConnectionUnblockedHandlers ( )
881
879
{
882
- List < EventHandler < EventArgs > > handler = m_recordedUnblockedEventHandlers ;
883
- if ( handler != null )
884
- {
885
- foreach ( EventHandler < EventArgs > eh in handler )
886
- {
887
- m_delegate . ConnectionUnblocked += eh ;
888
- }
889
- }
880
+ m_delegate . ConnectionUnblocked += m_recordedUnblockedEventHandlers ;
890
881
}
891
882
892
883
protected void RecoverConsumers ( )
@@ -1054,8 +1045,8 @@ protected void RunRecoveryEventHandlers()
1054
1045
protected bool ShouldTriggerConnectionRecovery ( ShutdownEventArgs args )
1055
1046
{
1056
1047
return ( args . Initiator == ShutdownInitiator . Peer ||
1057
- // happens when EOF is reached, e.g. due to RabbitMQ node
1058
- // connectivity loss or abrupt shutdown
1048
+ // happens when EOF is reached, e.g. due to RabbitMQ node
1049
+ // connectivity loss or abrupt shutdown
1059
1050
args . Initiator == ShutdownInitiator . Library ) ;
1060
1051
}
1061
1052
}
0 commit comments