kernel32: Call Fls callback
André Hentschel
nerv at dawncrow.de
Sat May 28 09:09:22 CDT 2011
---
dlls/kernel32/fiber.c | 8 +++++---
dlls/kernel32/tests/fiber.c | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/fiber.c b/dlls/kernel32/fiber.c
index ca4c8f9..ffa8873 100644
--- a/dlls/kernel32/fiber.c
+++ b/dlls/kernel32/fiber.c
@@ -259,13 +259,15 @@ DWORD WINAPI FlsAlloc( PFLS_CALLBACK_FUNCTION callback )
BOOL WINAPI FlsFree( DWORD index )
{
BOOL ret;
+ PEB * const peb = NtCurrentTeb()->Peb;
RtlAcquirePebLock();
- ret = RtlAreBitsSet( NtCurrentTeb()->Peb->FlsBitmap, index, 1 );
- if (ret) RtlClearBits( NtCurrentTeb()->Peb->FlsBitmap, index, 1 );
+ ret = RtlAreBitsSet( peb->FlsBitmap, index, 1 );
+ if (ret) RtlClearBits( peb->FlsBitmap, index, 1 );
if (ret)
{
- /* FIXME: call Fls callback */
+ if (peb->FlsCallback[index])
+ ((PFLS_CALLBACK_FUNCTION)peb->FlsCallback[index])(NtCurrentTeb()->FlsSlots[index]);
/* FIXME: add equivalent of ThreadZeroTlsCell here */
if (NtCurrentTeb()->FlsSlots) NtCurrentTeb()->FlsSlots[index] = 0;
}
diff --git a/dlls/kernel32/tests/fiber.c b/dlls/kernel32/tests/fiber.c
index 0e68535..7a18fe7 100644
--- a/dlls/kernel32/tests/fiber.c
+++ b/dlls/kernel32/tests/fiber.c
@@ -180,7 +180,7 @@ static void test_FiberLocalStorage(PFLS_CALLBACK_FUNCTION cbfunc)
ret = pFlsFree(fls);
ok(ret, "FlsFree failed\n");
if (cbfunc)
- todo_wine ok(cbCount == 1, "Wrong callback count: %d\n", cbCount);
+ ok(cbCount == 1, "Wrong callback count: %d\n", cbCount);
}
START_TEST(fiber)
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list