ntdll: Fix the libdl refcount when loading the same builtin twice.
diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c index 340d646..d3f64a8 100644 --- a/dlls/kernel32/tests/module.c +++ b/dlls/kernel32/tests/module.c
@@ -179,7 +179,7 @@ /* Try to load the dll again, if refcounting is ok, this should work */ hModule1 = LoadLibraryA(path1); - todo_wine ok(hModule1 != NULL, "LoadLibrary(%s) failed\n", path1); + ok(hModule1 != NULL, "LoadLibrary(%s) failed\n", path1); if (hModule1 != NULL) ok(FreeLibrary(hModule1), "FreeLibrary() failed\n"); }
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 23c6e3b..98b83b7 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c
@@ -1553,7 +1553,11 @@ } } - if (info.status != STATUS_SUCCESS) return info.status; + if (info.status != STATUS_SUCCESS) + { + wine_dll_unload( handle ); + return info.status; + } if (!info.wm) { @@ -1574,6 +1578,7 @@ break; } } + wine_dll_unload( handle ); /* release the libdl refcount */ if (!info.wm) return STATUS_INVALID_IMAGE_FORMAT; if (info.wm->ldr.LoadCount != -1) info.wm->ldr.LoadCount++; }