[IP]
authorCameron Gutman <aicommander@gmail.com>
Fri, 1 Jan 2010 05:58:37 +0000 (05:58 +0000)
committerCameron Gutman <aicommander@gmail.com>
Fri, 1 Jan 2010 05:58:37 +0000 (05:58 +0000)
 - Fix a small locking issue in TCPClose

svn path=/branches/aicom-network-branch/; revision=44845

lib/drivers/ip/transport/tcp/tcp.c

index 97d0519..ae02e4a 100644 (file)
@@ -731,25 +731,27 @@ NTSTATUS TCPClose
      * closure anymore but we still need it to determine
      * if we caused the closure
      */
+    LockObject(Connection, &OldIrql);
     Socket = Connection->SocketContext;
     Connection->SocketContext = NULL;
 
     /* We need to close here otherwise oskit will never indicate
      * SEL_FIN and we will never fully close the connection
      */
-    LockObject(Connection, &OldIrql);
     Status = TCPTranslateError( OskitTCPClose( Socket ) );
-    UnlockObject(Connection, OldIrql);
 
     if (!NT_SUCCESS(Status))
     {
         Connection->SocketContext = Socket;
+        UnlockObject(Connection, OldIrql);
         return Status;
     }
 
     if (Connection->AddressFile)
         DereferenceObject(Connection->AddressFile);
 
+    UnlockObject(Connection, OldIrql);
+
     DereferenceObject(Connection);
 
     return Status;