[TCPIP]
authorThomas Faber <thomas.faber@reactos.org>
Wed, 14 Sep 2016 11:46:19 +0000 (11:46 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Wed, 14 Sep 2016 11:46:19 +0000 (11:46 +0000)
- Don't try to mark IRPs as pending when they might already be completed. For simplicity, always pend them instead.
CORE-11962

svn path=/trunk/; revision=72673

reactos/drivers/network/tcpip/tcpip/dispatch.c

index 8c0b0f5..9315e1a 100644 (file)
@@ -400,6 +400,8 @@ NTSTATUS DispTdiConnect(
 
   IrpSp = IoGetCurrentIrpStackLocation(Irp);
 
+  IoMarkIrpPending(Irp);
+
   /* Get associated connection endpoint file object. Quit if none exists */
 
   TranContext = IrpSp->FileObject->FsContext;
@@ -434,12 +436,11 @@ NTSTATUS DispTdiConnect(
 done:
   if (Status != STATUS_PENDING) {
       DispDataRequestComplete(Irp, Status, 0);
-  } else
-      IoMarkIrpPending(Irp);
+  }
 
   TI_DbgPrint(MAX_TRACE, ("TCP Connect returned %08x\n", Status));
 
-  return Status;
+  return STATUS_PENDING;
 }
 
 
@@ -502,6 +503,8 @@ NTSTATUS DispTdiDisconnect(
   IrpSp = IoGetCurrentIrpStackLocation(Irp);
   DisReq = (PTDI_REQUEST_KERNEL_DISCONNECT)&IrpSp->Parameters;
 
+  IoMarkIrpPending(Irp);
+
   /* Get associated connection endpoint file object. Quit if none exists */
 
   TranContext = IrpSp->FileObject->FsContext;
@@ -537,12 +540,11 @@ NTSTATUS DispTdiDisconnect(
 done:
    if (Status != STATUS_PENDING) {
        DispDataRequestComplete(Irp, Status, 0);
-   } else
-       IoMarkIrpPending(Irp);
+   }
 
   TI_DbgPrint(MAX_TRACE, ("TCP Disconnect returned %08x\n", Status));
 
-  return Status;
+  return STATUS_PENDING;
 }
 
 
@@ -567,6 +569,8 @@ NTSTATUS DispTdiListen(
 
   IrpSp = IoGetCurrentIrpStackLocation(Irp);
 
+  IoMarkIrpPending(Irp);
+
   /* Get associated connection endpoint file object. Quit if none exists */
 
   TranContext = IrpSp->FileObject->FsContext;
@@ -649,12 +653,11 @@ NTSTATUS DispTdiListen(
 done:
   if (Status != STATUS_PENDING) {
       DispDataRequestComplete(Irp, Status, 0);
-  } else
-      IoMarkIrpPending(Irp);
+  }
 
   TI_DbgPrint(MID_TRACE,("Leaving %x\n", Status));
 
-  return Status;
+  return STATUS_PENDING;
 }
 
 
@@ -807,6 +810,8 @@ NTSTATUS DispTdiReceive(
   IrpSp = IoGetCurrentIrpStackLocation(Irp);
   ReceiveInfo = (PTDI_REQUEST_KERNEL_RECEIVE)&(IrpSp->Parameters);
 
+  IoMarkIrpPending(Irp);
+
   TranContext = IrpSp->FileObject->FsContext;
   if (TranContext == NULL)
     {
@@ -844,12 +849,11 @@ NTSTATUS DispTdiReceive(
 done:
   if (Status != STATUS_PENDING) {
       DispDataRequestComplete(Irp, Status, BytesReceived);
-  } else
-      IoMarkIrpPending(Irp);
+  }
 
   TI_DbgPrint(DEBUG_IRP, ("Leaving. Status is (0x%X)\n", Status));
 
-  return Status;
+  return STATUS_PENDING;
 }
 
 
@@ -875,6 +879,8 @@ NTSTATUS DispTdiReceiveDatagram(
   IrpSp     = IoGetCurrentIrpStackLocation(Irp);
   DgramInfo = (PTDI_REQUEST_KERNEL_RECEIVEDG)&(IrpSp->Parameters);
 
+  IoMarkIrpPending(Irp);
+
   TranContext = IrpSp->FileObject->FsContext;
   if (TranContext == NULL)
     {
@@ -918,12 +924,11 @@ NTSTATUS DispTdiReceiveDatagram(
 done:
    if (Status != STATUS_PENDING) {
        DispDataRequestComplete(Irp, Status, BytesReceived);
-   } else
-       IoMarkIrpPending(Irp);
+   }
 
   TI_DbgPrint(DEBUG_IRP, ("Leaving. Status is (0x%X)\n", Status));
 
-  return Status;
+  return STATUS_PENDING;
 }
 
 
@@ -948,6 +953,8 @@ NTSTATUS DispTdiSend(
   IrpSp = IoGetCurrentIrpStackLocation(Irp);
   SendInfo = (PTDI_REQUEST_KERNEL_SEND)&(IrpSp->Parameters);
 
+  IoMarkIrpPending(Irp);
+
   TranContext = IrpSp->FileObject->FsContext;
   if (TranContext == NULL)
     {
@@ -990,12 +997,11 @@ NTSTATUS DispTdiSend(
 done:
    if (Status != STATUS_PENDING) {
        DispDataRequestComplete(Irp, Status, BytesSent);
-   } else
-       IoMarkIrpPending(Irp);
+   }
 
   TI_DbgPrint(DEBUG_IRP, ("Leaving. Status is (0x%X)\n", Status));
 
-  return Status;
+  return STATUS_PENDING;
 }
 
 
@@ -1020,6 +1026,8 @@ NTSTATUS DispTdiSendDatagram(
     IrpSp       = IoGetCurrentIrpStackLocation(Irp);
     DgramInfo   = (PTDI_REQUEST_KERNEL_SENDDG)&(IrpSp->Parameters);
 
+    IoMarkIrpPending(Irp);
+
     TranContext = IrpSp->FileObject->FsContext;
     if (TranContext == NULL)
     {
@@ -1074,12 +1082,11 @@ NTSTATUS DispTdiSendDatagram(
 done:
     if (Status != STATUS_PENDING) {
         DispDataRequestComplete(Irp, Status, Irp->IoStatus.Information);
-    } else
-        IoMarkIrpPending(Irp);
+    }
 
     TI_DbgPrint(DEBUG_IRP, ("Leaving.\n"));
 
-    return Status;
+    return STATUS_PENDING;
 }