- Merge aicom-network-fixes up to r36337
authorCameron Gutman <aicommander@gmail.com>
Sat, 20 Sep 2008 00:39:55 +0000 (00:39 +0000)
committerCameron Gutman <aicommander@gmail.com>
Sat, 20 Sep 2008 00:39:55 +0000 (00:39 +0000)
svn path=/trunk/; revision=36338

reactos/drivers/network/ndis/ndis/config.c
reactos/drivers/network/ndis/ndis/control.c
reactos/drivers/network/ndis/ndis/miniport.c
reactos/drivers/network/tcpip/datalink/lan.c
reactos/drivers/network/tcpip/tcpip/fileobjs.c
reactos/drivers/network/tcpip/tcpip/pool.c
reactos/lib/drivers/ip/network/transmit.c
reactos/lib/drivers/ip/transport/tcp/accept.c
reactos/lib/drivers/ip/transport/tcp/event.c

index 233a1f4..c369d7a 100644 (file)
@@ -68,17 +68,6 @@ NdisWriteConfiguration(
     PVOID Data;
     WCHAR Buff[25];
 
-    if(ParameterType != NdisParameterInteger &&
-        ParameterType != NdisParameterHexInteger &&
-        ParameterType != NdisParameterString &&
-        ParameterType != NdisParameterMultiString &&
-        ParameterType != NdisParameterBinary
-      )
-    {
-        *Status = NDIS_STATUS_NOT_SUPPORTED;
-        return;
-    }
-
     /* reset parameter type to standard reg types */
     switch(ParameterType)
     {
@@ -118,7 +107,7 @@ NdisWriteConfiguration(
             break;
 
         default:
-            *Status = NDIS_STATUS_FAILURE;
+            *Status = NDIS_STATUS_NOT_SUPPORTED;
             return;
     }
 
@@ -342,6 +331,7 @@ NdisReadConfiguration(
       )
     {
         NDIS_DbgPrint(MID_TRACE,("unsupported parameter type\n"));
+        *Status = NDIS_STATUS_NOT_SUPPORTED;
         return;
     }
 
index 3dd2162..5013989 100644 (file)
@@ -87,6 +87,7 @@ NdisAcquireReadWriteLock(
         }
       }
     }
+    Lock->Context = PsGetCurrentThread();
     LockState->LockState = 3;
   }
 }
index 7631702..ed3b99b 100644 (file)
@@ -818,7 +818,10 @@ VOID NTAPI MiniportWorker(IN PVOID WorkItem)
                   KeLowerIrql(RaiseOldIrql);
                 }
               }
-           if( NdisStatus != NDIS_STATUS_PENDING ) {
+
+           if( NdisStatus == NDIS_STATUS_RESOURCES )
+               MiniQueueWorkItem(Adapter, WorkItemType, WorkItemContext);
+           else if( NdisStatus != NDIS_STATUS_PENDING ) {
                NdisMSendComplete
                    ( Adapter, (PNDIS_PACKET)WorkItemContext, NdisStatus );
                Adapter->MiniportBusy = FALSE;
@@ -1143,7 +1146,6 @@ NdisMRegisterAdapterShutdownHandler(
  *     ShutdownHandler:  Function to call to handle the bugcheck
  * NOTES:
  *     - I'm not sure about ShutdownContext
- *     - FIXME - memory leak below
  */
 {
   PLOGICAL_ADAPTER            Adapter = (PLOGICAL_ADAPTER)MiniportHandle;
@@ -1164,9 +1166,10 @@ NdisMRegisterAdapterShutdownHandler(
   BugcheckContext->ShutdownHandler = ShutdownHandler;
   BugcheckContext->DriverContext = ShutdownContext;
 
-  /* not sure if this needs to be initialized or not... oh well, it's a leak. */
   BugcheckContext->CallbackRecord = ExAllocatePool(NonPagedPool, sizeof(KBUGCHECK_CALLBACK_RECORD));
 
+  KeInitializeCallbackRecord(BugcheckContext->CallbackRecord);
+
   KeRegisterBugCheckCallback(BugcheckContext->CallbackRecord, NdisIBugcheckCallback,
       BugcheckContext, sizeof(BugcheckContext), (PUCHAR)"Ndis Miniport");
 }
index c82ad04..9a026bc 100644 (file)
@@ -1207,11 +1207,6 @@ NDIS_STATUS LANRegisterAdapter(
     /* Convert returned link speed to bps (it is in 100bps increments) */
     IF->Speed = Speed * 100L;
 
-    /* Add adapter to the adapter list */
-    ExInterlockedInsertTailList(&AdapterListHead,
-                                &IF->ListEntry,
-                                &AdapterListLock);
-
     /* Bind adapter to IP layer */
     if( !BindAdapter(IF, RegistryPath) ) {
        TI_DbgPrint(DEBUG_DATALINK,("denying adapter %wZ (BindAdapter)\n", AdapterName));
@@ -1219,6 +1214,11 @@ NDIS_STATUS LANRegisterAdapter(
        return NDIS_STATUS_NOT_ACCEPTED;
     }
 
+    /* Add adapter to the adapter list */
+    ExInterlockedInsertTailList(&AdapterListHead,
+                                &IF->ListEntry,
+                                &AdapterListLock);
+
     TI_DbgPrint(DEBUG_DATALINK, ("Leaving.\n"));
 
     return NDIS_STATUS_SUCCESS;
index 546df6f..054dd98 100644 (file)
@@ -409,6 +409,11 @@ NTSTATUS FileOpenConnection(
 
   Status = TCPSocket( Connection, AF_INET, SOCK_STREAM, IPPROTO_TCP );
 
+  if( !NT_SUCCESS(Status) ) {
+      TCPFreeConnectionEndpoint( Connection );
+      return Status;
+  }
+
   /* Return connection endpoint file object */
   Request->Handle.ConnectionContext = Connection;
 
index 9ded1ac..0ca22a3 100644 (file)
@@ -26,6 +26,8 @@ PVOID PoolAllocateBuffer(
 
     Buffer = ExAllocatePool(NonPagedPool, Size);
 
+    RtlZeroMemory(Buffer, Size);
+
     TI_DbgPrint(DEBUG_MEMORY, ("Allocated (%i) bytes at (0x%X).\n", Size, Buffer));
 
     return Buffer;
index bc9e1d9..3fdc7ff 100644 (file)
@@ -34,10 +34,7 @@ VOID IPSendComplete
         ("Called. Context (0x%X)  NdisPacket (0x%X)  NdisStatus (0x%X)\n",
          Context, NdisPacket, NdisStatus));
 
-    /* FIXME: Stop sending fragments and cleanup datagram buffers if
-       there was an error */
-
-    if (PrepareNextFragment(IFC)) {
+    if (NT_SUCCESS(NdisStatus) && PrepareNextFragment(IFC)) {
        /* A fragment was prepared for transmission, so send it */
        IPSendFragment(IFC->NdisPacket, IFC->NCE, IFC);
     } else {
index e13cd09..447d39b 100644 (file)
@@ -117,6 +117,7 @@ VOID TCPAbortListenForSocket( PCONNECTION_ENDPOINT Listener,
        if( Bucket->AssociatedEndpoint == Connection ) {
            RemoveEntryList( ListEntry->Blink );
            ExFreePool( Bucket );
+           break;
        }
     }
 
@@ -141,10 +142,14 @@ NTSTATUS TCPAccept
 
    if( Status == STATUS_PENDING ) {
        Bucket = ExAllocatePool( NonPagedPool, sizeof(*Bucket) );
-       Bucket->AssociatedEndpoint = Connection;
-       Bucket->Request.RequestNotifyObject = Complete;
-       Bucket->Request.RequestContext = Context;
-       InsertHeadList( &Listener->ListenRequest, &Bucket->Entry );
+
+       if( Bucket ) {
+           Bucket->AssociatedEndpoint = Connection;
+           Bucket->Request.RequestNotifyObject = Complete;
+           Bucket->Request.RequestContext = Context;
+           InsertHeadList( &Listener->ListenRequest, &Bucket->Entry );
+       } else
+           Status = STATUS_NO_MEMORY;
    }
 
    TcpipRecursiveMutexLeave( &TCPLock );
index 39de114..1e4c571 100644 (file)
@@ -104,8 +104,7 @@ int TCPPacketSend(void *ClientData, OSK_PCHAR data, OSK_UINT len ) {
 
     IPSendDatagram( &Packet, NCE, TCPPacketSendComplete, NULL );
 
-    if( !NT_SUCCESS(NdisStatus) ) return OSK_EINVAL;
-    else return 0;
+    return 0;
 }
 
 int TCPSleep( void *ClientData, void *token, int priority, char *msg,
@@ -144,7 +143,9 @@ int TCPSleep( void *ClientData, void *token, int priority, char *msg,
        TcpipRecursiveMutexEnter( &TCPLock, TRUE );
 
        PoolFreeBuffer( SleepingThread );
-    }
+    } else
+        return OSK_ENOBUFS;
+
     TI_DbgPrint(DEBUG_TCP,("Waiting finished: %x\n", token));
     return 0;
 }