- Stop using the TCPLock to protect all entries into the IP lib
[reactos.git] / reactos / lib / drivers / ip / transport / tcp / accept.c
index ee1f3bf..f44c0c9 100644 (file)
@@ -19,8 +19,6 @@ NTSTATUS TCPServiceListeningSocket( PCONNECTION_ENDPOINT Listener,
     PTA_IP_ADDRESS RequestAddressReturn;
     PTDI_CONNECTION_INFORMATION WhoIsConnecting;
 
-    ASSERT_LOCKED(&TCPLock);
-
     /* Unpack TDI info -- We need the return connection information
      * struct to return the address so it can be filtered if needed
      * by WSAAccept -- The returned address will be passed on to
@@ -28,6 +26,8 @@ NTSTATUS TCPServiceListeningSocket( PCONNECTION_ENDPOINT Listener,
     WhoIsConnecting = (PTDI_CONNECTION_INFORMATION)
     Request->ReturnConnectionInformation;
 
+    TcpipRecursiveMutexEnter(&TCPLock);
+
     Status = TCPTranslateError
     ( OskitTCPAccept( Listener->SocketContext,
               &Connection->SocketContext,
@@ -36,6 +36,8 @@ NTSTATUS TCPServiceListeningSocket( PCONNECTION_ENDPOINT Listener,
               &OutAddrLen,
               Request->RequestFlags & TDI_QUERY_ACCEPT ? 0 : 1 ) );
 
+    TcpipRecursiveMutexLeave(&TCPLock);
+
     TI_DbgPrint(DEBUG_TCP,("Status %x\n", Status));
 
     if( NT_SUCCESS(Status) && Status != STATUS_PENDING ) {
@@ -70,8 +72,6 @@ NTSTATUS TCPListen( PCONNECTION_ENDPOINT Connection, UINT Backlog ) {
     NTSTATUS Status = STATUS_SUCCESS;
     SOCKADDR_IN AddressToBind;
 
-    TcpipRecursiveMutexEnter( &TCPLock, TRUE );
-
     ASSERT(Connection);
     ASSERT_KM_POINTER(Connection->SocketContext);
     ASSERT_KM_POINTER(Connection->AddressFile);
@@ -89,6 +89,8 @@ NTSTATUS TCPListen( PCONNECTION_ENDPOINT Connection, UINT Backlog ) {
 
     TI_DbgPrint(DEBUG_TCP,("AddressToBind - %x:%x\n", AddressToBind.sin_addr, AddressToBind.sin_port));
 
+    TcpipRecursiveMutexEnter( &TCPLock );
+
     Status = TCPTranslateError( OskitTCPBind( Connection->SocketContext,
                         &AddressToBind,
                         sizeof(AddressToBind) ) );
@@ -138,13 +140,9 @@ NTSTATUS TCPAccept ( PTDI_REQUEST Request,
 
     TI_DbgPrint(DEBUG_TCP,("TCPAccept started\n"));
 
-    TcpipRecursiveMutexEnter( &TCPLock, TRUE );
-
     Status = TCPServiceListeningSocket( Listener, Connection,
                        (PTDI_REQUEST_KERNEL)Request );
 
-    TcpipRecursiveMutexLeave( &TCPLock );
-
     if( Status == STATUS_PENDING ) {
         Bucket = exAllocatePool( NonPagedPool, sizeof(*Bucket) );