Переглянути джерело

Reduce race conditions on stop/dispose.

drieseng 9 роки тому
батько
коміт
9a281a91f7

+ 7 - 5
src/Renci.SshNet/ForwardedPort.cs

@@ -93,9 +93,10 @@ namespace Renci.SshNet
         {
             RaiseClosing();
 
-            if (Session != null)
+            var session = Session;
+            if (session != null)
             {
-                Session.ErrorOccured -= Session_ErrorOccured;
+                session.ErrorOccured -= Session_ErrorOccured;
             }
         }
 
@@ -107,10 +108,11 @@ namespace Renci.SshNet
         {
             if (disposing)
             {
-                if (Session != null)
+                var session = Session;
+                if (session != null)
                 {
-                    Session.ErrorOccured -= Session_ErrorOccured;
-                    StopPort(Session.ConnectionInfo.Timeout);
+                    session.ErrorOccured -= Session_ErrorOccured;
+                    StopPort(session.ConnectionInfo.Timeout);
                     Session = null;
                 }
             }

+ 3 - 2
src/Renci.SshNet/ForwardedPortDynamic.NET.cs

@@ -333,10 +333,11 @@ namespace Renci.SshNet
         {
             if (disposing)
             {
-                if (_listener != null)
+                var listener = _listener;
+                if (listener != null)
                 {
-                    _listener.Dispose();
                     _listener = null;
+                    listener.Dispose();
                 }
             }
         }

+ 1 - 1
src/Renci.SshNet/ForwardedPortDynamic.cs

@@ -139,8 +139,8 @@ namespace Renci.SshNet
                 var listenerCompleted = _listenerCompleted;
                 if (listenerCompleted != null)
                 {
-                    listenerCompleted.Dispose();
                     _listenerCompleted = null;
+                    listenerCompleted.Dispose();
                 }
             }
 

+ 3 - 2
src/Renci.SshNet/ForwardedPortLocal.NET.cs

@@ -231,10 +231,11 @@ namespace Renci.SshNet
         {
             if (disposing)
             {
-                if (_listener != null)
+                var listener = _listener;
+                if (listener != null)
                 {
-                    _listener.Dispose();
                     _listener = null;
+                    listener.Dispose();
                 }
             }
         }

+ 1 - 1
src/Renci.SshNet/ForwardedPortLocal.cs

@@ -180,8 +180,8 @@ namespace Renci.SshNet
                 var listenerTaskCompleted = _listenerTaskCompleted;
                 if (listenerTaskCompleted != null)
                 {
-                    listenerTaskCompleted.Dispose();
                     _listenerTaskCompleted = null;
+                    listenerTaskCompleted.Dispose();
                 }
             }
 

+ 1 - 1
src/Renci.SshNet/ForwardedPortRemote.cs

@@ -317,8 +317,8 @@ namespace Renci.SshNet
                 var globalRequestResponse = _globalRequestResponse;
                 if (globalRequestResponse != null)
                 {
-                    globalRequestResponse.Dispose();
                     _globalRequestResponse = null;
+                    globalRequestResponse.Dispose();
                 }
             }