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
|
ABI_FONT_VERSION
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int ModuleDuplicated[] = {};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
FreeStringList(char **paths)
|
FreeStringList(char **paths)
|
||||||
{
|
{
|
||||||
|
@ -785,7 +787,6 @@ ModuleDescPtr
|
||||||
DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent)
|
DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent)
|
||||||
{
|
{
|
||||||
ModuleDescPtr ret;
|
ModuleDescPtr ret;
|
||||||
int errmaj, errmin;
|
|
||||||
|
|
||||||
if (!mod)
|
if (!mod)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -794,14 +795,11 @@ DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent)
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!(ret->handle = LoaderOpen(mod->path, &errmaj, &errmin))) {
|
ret->handle = mod->handle;
|
||||||
free(ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret->SetupProc = mod->SetupProc;
|
ret->SetupProc = mod->SetupProc;
|
||||||
ret->TearDownProc = mod->TearDownProc;
|
ret->TearDownProc = mod->TearDownProc;
|
||||||
ret->TearDownData = NULL;
|
ret->TearDownData = ModuleDuplicated;
|
||||||
ret->child = DuplicateModule(mod->child, ret);
|
ret->child = DuplicateModule(mod->child, ret);
|
||||||
ret->sib = DuplicateModule(mod->sib, parent);
|
ret->sib = DuplicateModule(mod->sib, parent);
|
||||||
ret->parent = parent;
|
ret->parent = parent;
|
||||||
|
@ -1077,9 +1075,11 @@ UnloadModuleOrDriver(ModuleDescPtr mod)
|
||||||
else
|
else
|
||||||
xf86MsgVerb(X_INFO, 3, "UnloadModule: \"%s\"\n", mod->name);
|
xf86MsgVerb(X_INFO, 3, "UnloadModule: \"%s\"\n", mod->name);
|
||||||
|
|
||||||
|
if (mod->TearDownData != ModuleDuplicated) {
|
||||||
if ((mod->TearDownProc) && (mod->TearDownData))
|
if ((mod->TearDownProc) && (mod->TearDownData))
|
||||||
mod->TearDownProc(mod->TearDownData);
|
mod->TearDownProc(mod->TearDownData);
|
||||||
LoaderUnload(mod->name, mod->handle);
|
LoaderUnload(mod->name, mod->handle);
|
||||||
|
}
|
||||||
|
|
||||||
if (mod->child)
|
if (mod->child)
|
||||||
UnloadModuleOrDriver(mod->child);
|
UnloadModuleOrDriver(mod->child);
|
||||||
|
|
Loading…
Reference in New Issue