Index: drivers/net/tcpip/datalink/lan.c =================================================================== RCS file: /CVS/ReactOS/reactos/drivers/net/tcpip/datalink/lan.c,v retrieving revision 1.31 diff -u -r1.31 lan.c --- drivers/net/tcpip/datalink/lan.c 4 Dec 2004 23:29:55 -0000 1.31 +++ drivers/net/tcpip/datalink/lan.c 5 Dec 2004 14:36:57 -0000 @@ -273,14 +273,18 @@ BOOLEAN WorkStart; PLAN_WQ_ITEM WQItem; PLAN_ADAPTER Adapter = (PLAN_ADAPTER)BindingContext; + KIRQL OldIrql; ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); if( Status != NDIS_STATUS_SUCCESS ) return; + TcpipAcquireSpinLock( &LanWorkLock, &OldIrql ); WQItem = ExAllocatePool( NonPagedPool, sizeof(LAN_WQ_ITEM) ); - if( !WQItem ) return; + if( !WQItem ) { + TcpipReleaseSpinLock( &LanWorkLock, OldIrql ); + return; + } - TcpipAcquireSpinLockAtDpcLevel( &LanWorkLock ); WorkStart = IsListEmpty( &LanWorkList ); WQItem->Packet = Packet; WQItem->Adapter = Adapter; @@ -288,7 +292,7 @@ InsertTailList( &LanWorkList, &WQItem->ListEntry ); if( WorkStart ) ExQueueWorkItem( &LanWorkItem, CriticalWorkQueue ); - TcpipReleaseSpinLockFromDpcLevel( &LanWorkLock ); + TcpipReleaseSpinLock( &LanWorkLock, OldIrql ); } NDIS_STATUS STDCALL ProtocolReceive( @@ -322,6 +326,7 @@ PNDIS_PACKET NdisPacket; PLAN_ADAPTER Adapter = (PLAN_ADAPTER)BindingContext; PETH_HEADER EHeader = (PETH_HEADER)HeaderBuffer; + KIRQL OldIrql; TI_DbgPrint(DEBUG_DATALINK, ("Called. (packetsize %d)\n",PacketSize)); @@ -359,9 +364,12 @@ TI_DbgPrint(DEBUG_DATALINK, ("Adapter: %x (MTU %d)\n", Adapter, Adapter->MTU)); + TcpipAcquireSpinLock( &LanWorkLock, &OldIrql ); + NdisStatus = AllocatePacketWithBuffer( &NdisPacket, NULL, PacketSize + HeaderBufferSize ); if( NdisStatus != NDIS_STATUS_SUCCESS ) { + TcpipReleaseSpinLock( &LanWorkLock, OldIrql ); return NDIS_STATUS_NOT_ACCEPTED; } @@ -407,6 +415,7 @@ PacketSize); TI_DbgPrint(DEBUG_DATALINK, ("leaving\n")); + TcpipReleaseSpinLock( &LanWorkLock, OldIrql ); return NDIS_STATUS_SUCCESS; }