[RXCE]
authorPierre Schweitzer <pierre@reactos.org>
Fri, 4 Aug 2017 19:05:11 +0000 (19:05 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Fri, 4 Aug 2017 19:05:11 +0000 (19:05 +0000)
In RxRemoveNameNetFcb(), check if name was already removed. MS doesn't do this, but as we use double linked-list macros
that perform extra sanity checks, this is required. This can be called twice for a single FCB.

CORE-11327
CORE-13632
CORE-13636

svn path=/trunk/; revision=75480

reactos/sdk/lib/drivers/rxce/rxce.c

index c2c2b81..4f67abc 100644 (file)
@@ -7533,10 +7533,17 @@ RxRemoveNameNetFcb(
     ASSERT(RxIsFcbTableLockExclusive(&NetRoot->FcbTable));
     ASSERT(RxIsFcbAcquiredExclusive(ThisFcb));
 
-    RxFcbTableRemoveFcb(&NetRoot->FcbTable, ThisFcb);
-    DPRINT("FCB (%p) %wZ removed\n", ThisFcb, &ThisFcb->FcbTableEntry.Path);
-    /* Mark, so that we don't try to do it twice */
-    SetFlag(ThisFcb->FcbState, FCB_STATE_NAME_ALREADY_REMOVED);
+#ifdef __REACTOS__
+    if (!BooleanFlagOn(ThisFcb->FcbState, FCB_STATE_NAME_ALREADY_REMOVED))
+    {
+#endif
+        RxFcbTableRemoveFcb(&NetRoot->FcbTable, ThisFcb);
+        DPRINT("FCB (%p) %wZ removed\n", ThisFcb, &ThisFcb->FcbTableEntry.Path);
+        /* Mark, so that we don't try to do it twice */
+        SetFlag(ThisFcb->FcbState, FCB_STATE_NAME_ALREADY_REMOVED);
+#ifdef __REACTOS__
+    }
+#endif
 }
 
 /*