mirror of
https://github.com/reactos/reactos.git
synced 2024-10-02 15:34:13 +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
|
* 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
|
* PURPOSE: Fiber Implementation
|
||||||
* PROGRAMMERS:
|
* COPYRIGHT: Copyright 2005-2011 Alex Ionescu (alex@relsoft.net)
|
||||||
* Alex Ionescu (alex@relsoft.net)
|
* Copyright 2003-2008 KJK::Hyperion (noog@libero.it)
|
||||||
* KJK::Hyperion <noog@libero.it>
|
* Copyright 2018 Mark Jansen (mark.jansen@reactos.org)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <k32.h>
|
#include <k32.h>
|
||||||
#include <ndk/rtltypes.h>
|
#include <ndk/rtltypes.h>
|
||||||
|
|
||||||
|
@ -410,6 +410,8 @@ FlsFree(DWORD dwFlsIndex)
|
||||||
|
|
||||||
RtlAcquirePebLock();
|
RtlAcquirePebLock();
|
||||||
|
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
ret = RtlAreBitsSet(Peb->FlsBitmap, dwFlsIndex, 1);
|
ret = RtlAreBitsSet(Peb->FlsBitmap, dwFlsIndex, 1);
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
|
@ -418,7 +420,6 @@ FlsFree(DWORD dwFlsIndex)
|
||||||
|
|
||||||
RtlClearBits(Peb->FlsBitmap, dwFlsIndex, 1);
|
RtlClearBits(Peb->FlsBitmap, dwFlsIndex, 1);
|
||||||
lpCallback = Peb->FlsCallback[dwFlsIndex];
|
lpCallback = Peb->FlsCallback[dwFlsIndex];
|
||||||
Peb->FlsCallback[dwFlsIndex] = NULL;
|
|
||||||
|
|
||||||
for (Entry = Peb->FlsListHead.Flink; Entry != &Peb->FlsListHead; Entry = Entry->Flink)
|
for (Entry = Peb->FlsListHead.Flink; Entry != &Peb->FlsListHead; Entry = Entry->Flink)
|
||||||
{
|
{
|
||||||
|
@ -434,12 +435,19 @@ FlsFree(DWORD dwFlsIndex)
|
||||||
pFlsData->Data[dwFlsIndex] = NULL;
|
pFlsData->Data[dwFlsIndex] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Peb->FlsCallback[dwFlsIndex] = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
_SEH2_FINALLY
|
||||||
|
{
|
||||||
RtlReleasePebLock();
|
RtlReleasePebLock();
|
||||||
|
}
|
||||||
|
_SEH2_END;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue