@@ -2564,6 +2564,7 @@ CxPlatDataPathSocketProcessAcceptCompletion(
2564
2564
{
2565
2565
CXPLAT_SOCKET_PROC * ListenerSocketProc = CONTAINING_RECORD (Sqe , CXPLAT_SOCKET_PROC , IoSqe );
2566
2566
ULONG IoResult = RtlNtStatusToDosError ((NTSTATUS )Cqe -> Internal );
2567
+ CXPLAT_SOCKET_PROC * AcceptSocketProc = NULL ;
2567
2568
2568
2569
if (IoResult == WSAENOTSOCK || IoResult == WSA_OPERATION_ABORTED ) {
2569
2570
//
@@ -2579,7 +2580,7 @@ CxPlatDataPathSocketProcessAcceptCompletion(
2579
2580
2580
2581
if (IoResult == QUIC_STATUS_SUCCESS ) {
2581
2582
CXPLAT_DBG_ASSERT (ListenerSocketProc -> AcceptSocket != NULL );
2582
- CXPLAT_SOCKET_PROC * AcceptSocketProc = & ListenerSocketProc -> AcceptSocket -> PerProcSockets [0 ];
2583
+ AcceptSocketProc = & ListenerSocketProc -> AcceptSocket -> PerProcSockets [0 ];
2583
2584
CXPLAT_DBG_ASSERT (ListenerSocketProc -> AcceptSocket == AcceptSocketProc -> Parent );
2584
2585
DWORD BytesReturned ;
2585
2586
SOCKET_PROCESSOR_AFFINITY RssAffinity = { 0 };
@@ -2592,6 +2593,11 @@ CxPlatDataPathSocketProcessAcceptCompletion(
2592
2593
0 ,
2593
2594
"AcceptEx Completed!" );
2594
2595
2596
+
2597
+ if (!CxPlatRundownAcquire (& AcceptSocketProc -> RundownRef )) {
2598
+ goto Error ;
2599
+ }
2600
+
2595
2601
int Result =
2596
2602
setsockopt (
2597
2603
AcceptSocketProc -> Socket ,
@@ -2646,16 +2652,16 @@ CxPlatDataPathSocketProcessAcceptCompletion(
2646
2652
goto Error ;
2647
2653
}
2648
2654
2649
- CxPlatDataPathStartReceiveAsync (AcceptSocketProc );
2650
-
2651
- AcceptSocketProc -> IoStarted = TRUE;
2652
2655
Datapath -> TcpHandlers .Accept (
2653
2656
ListenerSocketProc -> Parent ,
2654
2657
ListenerSocketProc -> Parent -> ClientContext ,
2655
2658
ListenerSocketProc -> AcceptSocket ,
2656
2659
& ListenerSocketProc -> AcceptSocket -> ClientContext );
2657
2660
ListenerSocketProc -> AcceptSocket = NULL ;
2658
2661
2662
+ AcceptSocketProc -> IoStarted = TRUE;
2663
+ CxPlatDataPathStartReceiveAsync (AcceptSocketProc );
2664
+
2659
2665
} else {
2660
2666
QuicTraceEvent (
2661
2667
DatapathErrorStatus ,
@@ -2667,6 +2673,10 @@ CxPlatDataPathSocketProcessAcceptCompletion(
2667
2673
2668
2674
Error :
2669
2675
2676
+ if (AcceptSocketProc != NULL ) {
2677
+ CxPlatRundownRelease (& AcceptSocketProc -> RundownRef );
2678
+ }
2679
+
2670
2680
if (ListenerSocketProc -> AcceptSocket != NULL ) {
2671
2681
SocketDelete (ListenerSocketProc -> AcceptSocket );
2672
2682
ListenerSocketProc -> AcceptSocket = NULL ;
0 commit comments