From e010523b861b1dd80301a13a7391e3e8cc6683fd Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 4 Aug 2017 19:05:11 +0000 Subject: [PATCH] [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 svn path=/trunk/; revision=75480 --- reactos/sdk/lib/drivers/rxce/rxce.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/reactos/sdk/lib/drivers/rxce/rxce.c b/reactos/sdk/lib/drivers/rxce/rxce.c index c2c2b8118c2..4f67abcfdbc 100644 --- a/reactos/sdk/lib/drivers/rxce/rxce.c +++ b/reactos/sdk/lib/drivers/rxce/rxce.c @@ -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 } /* -- 2.17.1