diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index fecbee3ba1a..8e8834239ba 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -2629,8 +2629,7 @@ todo_wine SetLastError(0xdeadbeef); value = pFlsGetValue(fls_index); ok(!value, "FlsGetValue returned %p, expected NULL\n", value); - todo_wine - ok(GetLastError() == ERROR_SUCCESS, "FlsGetValue failed with error %u\n", GetLastError()); + ok(GetLastError() == ERROR_SUCCESS, "FlsGetValue failed with error %u\n", GetLastError()); ret = pFlsSetValue(fls_index, (void*) 0x31415); ok(ret, "FlsSetValue failed\n"); fls_count++; diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 1d5ffc33f5d..8374dd97326 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -3511,6 +3511,8 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR InsertHeadList( &tls_links, &NtCurrentTeb()->TlsLinks ); RtlReleasePebLock(); + NtCurrentTeb()->FlsSlots = fls_alloc_data(); + if (!attach_done) /* first time around */ { attach_done = 1; diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index 19bf574a446..41e8666a25c 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -129,5 +129,6 @@ static inline void ascii_to_unicode( WCHAR *dst, const char *src, size_t len ) /* FLS data */ extern void init_global_fls_data(void) DECLSPEC_HIDDEN; +extern TEB_FLS_DATA *fls_alloc_data(void) DECLSPEC_HIDDEN; #endif diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c index 6b88d0ed8e0..822dc21fbbc 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -294,7 +294,7 @@ static unsigned int fls_chunk_index_from_index( unsigned int index, unsigned int return chunk_index; } -static TEB_FLS_DATA * fls_alloc_data(void) +TEB_FLS_DATA *fls_alloc_data(void) { TEB_FLS_DATA *fls;