Author: pschweitzer
Date: Fri Aug  4 19:05:11 2017
New Revision: 75480

URL: http://svn.reactos.org/svn/reactos?rev=75480&view=rev
Log:
[RXCE]
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

Modified:
    trunk/reactos/sdk/lib/drivers/rxce/rxce.c

Modified: trunk/reactos/sdk/lib/drivers/rxce/rxce.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/drivers/rxce/rxce.c?rev=75480&r1=75479&r2=75480&view=diff
==============================================================================
--- trunk/reactos/sdk/lib/drivers/rxce/rxce.c   [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/drivers/rxce/rxce.c   [iso-8859-1] Fri Aug  4 
19:05:11 2017
@@ -7533,10 +7533,17 @@
     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
 }
 
 /*


Reply via email to