Do not uselessly reload modules in DuplicateModule
The function does not initialize the module so it has no business loading it. If some user of DuplicateModule expects a module actually loaded they should use LoadModule. Signed-off-by: Michal Suchanek <hramrach@centrum.cz> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
24d435163e
commit
df0dd36dee
|
@ -94,6 +94,8 @@ const ModuleVersions LoaderVersionInfo = {
|
|||
ABI_FONT_VERSION
|
||||
};
|
||||
|
||||
static int ModuleDuplicated[] = {};
|
||||
|
||||
static void
|
||||
FreeStringList(char **paths)
|
||||
{
|
||||
|
@ -785,7 +787,6 @@ ModuleDescPtr
|
|||
DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent)
|
||||
{
|
||||
ModuleDescPtr ret;
|
||||
int errmaj, errmin;
|
||||
|
||||
if (!mod)
|
||||
return NULL;
|
||||
|
@ -794,14 +795,11 @@ DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent)
|
|||
if (ret == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!(ret->handle = LoaderOpen(mod->path, &errmaj, &errmin))) {
|
||||
free(ret);
|
||||
return NULL;
|
||||
}
|
||||
ret->handle = mod->handle;
|
||||
|
||||
ret->SetupProc = mod->SetupProc;
|
||||
ret->TearDownProc = mod->TearDownProc;
|
||||
ret->TearDownData = NULL;
|
||||
ret->TearDownData = ModuleDuplicated;
|
||||
ret->child = DuplicateModule(mod->child, ret);
|
||||
ret->sib = DuplicateModule(mod->sib, parent);
|
||||
ret->parent = parent;
|
||||
|
@ -1077,9 +1075,11 @@ UnloadModuleOrDriver(ModuleDescPtr mod)
|
|||
else
|
||||
xf86MsgVerb(X_INFO, 3, "UnloadModule: \"%s\"\n", mod->name);
|
||||
|
||||
if ((mod->TearDownProc) && (mod->TearDownData))
|
||||
mod->TearDownProc(mod->TearDownData);
|
||||
LoaderUnload(mod->name, mod->handle);
|
||||
if (mod->TearDownData != ModuleDuplicated) {
|
||||
if ((mod->TearDownProc) && (mod->TearDownData))
|
||||
mod->TearDownProc(mod->TearDownData);
|
||||
LoaderUnload(mod->name, mod->handle);
|
||||
}
|
||||
|
||||
if (mod->child)
|
||||
UnloadModuleOrDriver(mod->child);
|
||||
|
|
Loading…
Reference in New Issue