mirror of
https://github.com/reactos/reactos.git
synced 2024-07-02 18:54:25 +00:00
[KERNEL32] Ensure the PebLock is always released in FlsFree
This commit is contained in:
parent
b6e3cf3c03
commit
12654d2852
|
@ -1,12 +1,12 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS System Libraries
|
||||
* FILE: dll/win32/kernel32/client/fiber.c
|
||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||
* PURPOSE: Fiber Implementation
|
||||
* PROGRAMMERS:
|
||||
* Alex Ionescu (alex@relsoft.net)
|
||||
* KJK::Hyperion <noog@libero.it>
|
||||
* COPYRIGHT: Copyright 2005-2011 Alex Ionescu (alex@relsoft.net)
|
||||
* Copyright 2003-2008 KJK::Hyperion (noog@libero.it)
|
||||
* Copyright 2018 Mark Jansen (mark.jansen@reactos.org)
|
||||
*/
|
||||
|
||||
#include <k32.h>
|
||||
#include <ndk/rtltypes.h>
|
||||
|
||||
|
@ -410,6 +410,8 @@ FlsFree(DWORD dwFlsIndex)
|
|||
|
||||
RtlAcquirePebLock();
|
||||
|
||||
_SEH2_TRY
|
||||
{
|
||||
ret = RtlAreBitsSet(Peb->FlsBitmap, dwFlsIndex, 1);
|
||||
if (ret)
|
||||
{
|
||||
|
@ -418,7 +420,6 @@ FlsFree(DWORD dwFlsIndex)
|
|||
|
||||
RtlClearBits(Peb->FlsBitmap, dwFlsIndex, 1);
|
||||
lpCallback = Peb->FlsCallback[dwFlsIndex];
|
||||
Peb->FlsCallback[dwFlsIndex] = NULL;
|
||||
|
||||
for (Entry = Peb->FlsListHead.Flink; Entry != &Peb->FlsListHead; Entry = Entry->Flink)
|
||||
{
|
||||
|
@ -434,12 +435,19 @@ FlsFree(DWORD dwFlsIndex)
|
|||
pFlsData->Data[dwFlsIndex] = NULL;
|
||||
}
|
||||
}
|
||||
Peb->FlsCallback[dwFlsIndex] = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
}
|
||||
}
|
||||
_SEH2_FINALLY
|
||||
{
|
||||
RtlReleasePebLock();
|
||||
}
|
||||
_SEH2_END;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue