[PATCH 1/1] Look for ModuleData only in appropriate library
Michal Srb
msrb at suse.com
Wed Jun 27 09:04:32 PDT 2012
Calling dlsym with handle of the module library
instead of RTLD_DEFAULT prevents increasing reference
counter of the library and so allows it to be
really unloaded if UnloadModule is called on it
later.
---
hw/xfree86/loader/loader.c | 8 +++++++-
hw/xfree86/loader/loader.h | 1 +
hw/xfree86/loader/loadmod.c | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c
index b72b8b8..4e56e9e 100644
--- a/hw/xfree86/loader/loader.c
+++ b/hw/xfree86/loader/loader.c
@@ -160,6 +160,12 @@ LoaderSymbol(const char *name)
return NULL;
}
+void *
+LoaderSymbolFromModule(const char *name, void *handle)
+{
+ return dlsym(handle, name);
+}
+
void
LoaderUnload(const char *name, void *handle)
{
diff --git a/hw/xfree86/loader/loader.h b/hw/xfree86/loader/loader.h
index 5cadd5a..1d07cdb 100644
--- a/hw/xfree86/loader/loader.h
+++ b/hw/xfree86/loader/loader.h
@@ -72,5 +72,6 @@ extern unsigned long LoaderOptions;
/* Internal Functions */
void *LoaderOpen(const char *, int *, int *);
+void *LoaderSymbolFromModule(const char *, void *);
#endif /* _LOADER_H */
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index 706b9b3..b6fc394 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -956,7 +956,7 @@ doLoadModule(const char *module, const char *path, const
char **subdirlist,
*errmin = 0;
goto LoadModule_fail;
}
- initdata = LoaderSymbol(p);
+ initdata = LoaderSymbolFromModule(p, ret->handle);
if (initdata) {
ModuleSetupProc setup;
ModuleTearDownProc teardown;
--
1.7.7
More information about the xorg-devel
mailing list