|
|
@@ -294,7 +294,7 @@ namespace Renci.SshNet
|
|
|
_channel.Close();
|
|
|
}
|
|
|
|
|
|
- _channel.Dispose();
|
|
|
+ UnsubscribeFromEventsAndDisposeChannel();
|
|
|
_channel = null;
|
|
|
|
|
|
_asyncResult = null;
|
|
|
@@ -330,6 +330,7 @@ namespace Renci.SshNet
|
|
|
{
|
|
|
if (this._channel != null && this._channel.IsOpen && this._asyncResult != null)
|
|
|
{
|
|
|
+ // TODO: check with Oleg if we shouldn't dispose the channel and uninitialize it ?
|
|
|
this._channel.Close();
|
|
|
}
|
|
|
}
|
|
|
@@ -494,6 +495,19 @@ namespace Renci.SshNet
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void UnsubscribeFromEventsAndDisposeChannel()
|
|
|
+ {
|
|
|
+ // unsubscribe from events as we do not want to be signaled should these get fired
|
|
|
+ // during the dispose of the channel
|
|
|
+ _channel.DataReceived += Channel_DataReceived;
|
|
|
+ _channel.ExtendedDataReceived += Channel_ExtendedDataReceived;
|
|
|
+ _channel.RequestReceived += Channel_RequestReceived;
|
|
|
+ _channel.Closed += Channel_Closed;
|
|
|
+
|
|
|
+ // actually dispose the channel
|
|
|
+ _channel.Dispose();
|
|
|
+ }
|
|
|
+
|
|
|
partial void ExecuteThread(Action action);
|
|
|
|
|
|
#region IDisposable Members
|
|
|
@@ -549,7 +563,7 @@ namespace Renci.SshNet
|
|
|
// Dispose managed ResourceMessages.
|
|
|
if (this._channel != null)
|
|
|
{
|
|
|
- this._channel.Dispose();
|
|
|
+ UnsubscribeFromEventsAndDisposeChannel();
|
|
|
this._channel = null;
|
|
|
}
|
|
|
}
|