From: Eric Pouech <epouech@codeweavers.com> Signed-off-by: Eric Pouech <epouech@codeweavers.com> --- dlls/kernel32/tests/loader.c | 9 +-------- dlls/ntdll/loader.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index 2237f02269a..b72cee72843 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -4664,14 +4664,7 @@ static void test_ResolveDelayLoadedAPI(void) ok(GetModuleHandleA(dll_name) != NULL, "Expected DLL %s still to be loaded\n", dll_name); FreeLibrary(hlib); ok(GetModuleHandleA(dll_name) == NULL, "Expected DLL %s to be unloaded\n", dll_name); - todo_wine - ok(GetModuleHandleA(test_dll) == NULL, "Expected DLL %s to be unloaded\n", test_dll); - /* to be removed once Wine is fixed */ - if (GetModuleHandleA(test_dll) && winetest_platform_is_wine) - { - FreeLibrary(GetModuleHandleA(test_dll)); - ok(GetModuleHandleA(test_dll) == NULL, "Expected DLL %s to be unloaded\n", test_dll); - } + ok(GetModuleHandleA(test_dll) == NULL, "Expected DLL %s to be unloaded\n", test_dll); if (!pResolveDelayLoadsFromDll) { diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index b19bf78a456..347b5d26671 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -4095,7 +4095,17 @@ static NTSTATUS MODULE_DecRefCount( LDR_DDAG_NODE *node, void *context ) if ( wm->ldr.LoadCount == 0 ) { + ULONG size; + IMAGE_DELAYLOAD_DESCRIPTOR *descr; + wm->ldr.Flags |= LDR_UNLOAD_IN_PROGRESS; + descr = RtlImageDirectoryEntryToData( wm->ldr.DllBase, TRUE, IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT, &size ); + if (descr) + for ( ; descr->DllNameRVA; descr++) + { + HMODULE hmod = *(HMODULE *)get_rva(wm->ldr.DllBase, descr->ModuleHandleRVA); + if (hmod) LdrUnloadDll( hmod ); + } walk_node_dependencies( node, context, MODULE_DecRefCount ); wm->ldr.Flags &= ~LDR_UNLOAD_IN_PROGRESS; module_push_unload_trace( wm ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11052