@@ -58,6 +58,7 @@ namespace RabbitMQ.Client.Framing.Impl
58
58
{
59
59
internal sealed class Connection : IConnection
60
60
{
61
+ private bool _disposed = false ;
61
62
private readonly object _eventLock = new object ( ) ;
62
63
63
64
///<summary>Heartbeat frame for transmission. Reusable across connections.</summary>
@@ -137,6 +138,11 @@ public event EventHandler<ShutdownEventArgs> ConnectionShutdown
137
138
{
138
139
add
139
140
{
141
+ if ( _disposed )
142
+ {
143
+ throw new ObjectDisposedException ( GetType ( ) . FullName ) ;
144
+ }
145
+
140
146
bool ok = false ;
141
147
lock ( _eventLock )
142
148
{
@@ -153,6 +159,11 @@ public event EventHandler<ShutdownEventArgs> ConnectionShutdown
153
159
}
154
160
remove
155
161
{
162
+ if ( _disposed )
163
+ {
164
+ throw new ObjectDisposedException ( GetType ( ) . FullName ) ;
165
+ }
166
+
156
167
lock ( _eventLock )
157
168
{
158
169
_connectionShutdown -= value ;
@@ -675,6 +686,11 @@ public void OnConnectionUnblocked()
675
686
///<summary>Broadcasts notification of the final shutdown of the connection.</summary>
676
687
public void OnShutdown ( )
677
688
{
689
+ if ( _disposed )
690
+ {
691
+ throw new ObjectDisposedException ( GetType ( ) . FullName ) ;
692
+ }
693
+
678
694
EventHandler < ShutdownEventArgs > handler ;
679
695
ShutdownEventArgs reason ;
680
696
lock ( _eventLock )
@@ -1024,6 +1040,11 @@ void IDisposable.Dispose()
1024
1040
1025
1041
private void Dispose ( bool disposing )
1026
1042
{
1043
+ if ( _disposed )
1044
+ {
1045
+ return ;
1046
+ }
1047
+
1027
1048
if ( disposing )
1028
1049
{
1029
1050
// dispose managed resources
@@ -1039,6 +1060,7 @@ private void Dispose(bool disposing)
1039
1060
finally
1040
1061
{
1041
1062
_connectionShutdown = null ;
1063
+ _disposed = true ;
1042
1064
}
1043
1065
}
1044
1066
0 commit comments