mirror of
https://gitlab.winehq.org/wine/wine.git
synced 2024-11-19 17:06:04 -07:00
ntdll: Properly track refcount with forwarded exports.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52094
This commit is contained in:
parent
7686456a4e
commit
5ffce73492
2 changed files with 12 additions and 7 deletions
|
@ -2775,7 +2775,6 @@ static void subtest_export_forwarder_dep_chain( size_t num_chained_export_module
|
|||
|
||||
/* FreeLibrary() should *not* unload the DLL immediately */
|
||||
module = GetModuleHandleA( temp_paths[i] );
|
||||
todo_wine_if(i < ultimate_depender_index && i + 1 != importer_index)
|
||||
ok( module == modules[i], "modules[%Iu] expected %p, got %p (unloaded?) err=%lu\n",
|
||||
i, modules[i], module, GetLastError() );
|
||||
}
|
||||
|
@ -2787,7 +2786,6 @@ static void subtest_export_forwarder_dep_chain( size_t num_chained_export_module
|
|||
{
|
||||
HMODULE module = GetModuleHandleA( temp_paths[i] );
|
||||
|
||||
todo_wine_if(i < ultimate_depender_index && i + 1 != importer_index)
|
||||
ok( module == modules[i], "modules[%Iu] expected %p, got %p (unloaded?) err=%lu\n",
|
||||
i, modules[i], module, GetLastError() );
|
||||
}
|
||||
|
|
|
@ -1033,11 +1033,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
|
|||
if (load_dll( load_path, mod_name, 0, &wm, imp->system ) == STATUS_SUCCESS &&
|
||||
!(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS))
|
||||
{
|
||||
if (!imports_fixup_done)
|
||||
{
|
||||
add_module_dependency( current_importer->modref->ldr.DdagNode, wm->ldr.DdagNode );
|
||||
}
|
||||
else if (process_attach( wm->ldr.DdagNode, NULL ) != STATUS_SUCCESS)
|
||||
if (imports_fixup_done && process_attach( wm->ldr.DdagNode, NULL ) != STATUS_SUCCESS)
|
||||
{
|
||||
LdrUnloadDll( wm->ldr.DllBase );
|
||||
wm = NULL;
|
||||
|
@ -1051,6 +1047,11 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
|
|||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wm->ldr.LoadCount != -1) wm->ldr.LoadCount++;
|
||||
}
|
||||
|
||||
if ((exports = RtlImageDirectoryEntryToData( wm->ldr.DllBase, TRUE,
|
||||
IMAGE_DIRECTORY_ENTRY_EXPORT, &exp_size )))
|
||||
{
|
||||
|
@ -1070,6 +1071,12 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
|
|||
forward, debugstr_w(get_modref(module)->ldr.FullDllName.Buffer),
|
||||
debugstr_w(get_modref(module)->ldr.BaseDllName.Buffer) );
|
||||
}
|
||||
else if (wm->ldr.DdagNode != node_ntdll && wm->ldr.DdagNode != node_kernel32)
|
||||
{
|
||||
add_module_dependency( current_importer->modref->ldr.DdagNode, wm->ldr.DdagNode );
|
||||
wm = NULL;
|
||||
}
|
||||
if (wm) LdrUnloadDll( wm->ldr.DllBase );
|
||||
return proc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue