Bug 937496 - Check if libudev already loaded before trying to load symbols from it; r=ted

This commit is contained in:
Kyle Machulis 2013-11-19 12:52:37 -08:00
parent deb33a30a9
commit 6eeb0d3c51

View File

@ -30,13 +30,27 @@ class udev_lib {
// symbols this code relies on, per:
// https://lists.fedoraproject.org/pipermail/devel/2012-June/168227.html
const char* lib_names[] = {"libudev.so.0", "libudev.so.1"};
// Check whether a library is already loaded so we don't load two
// conflicting libs.
for (unsigned i = 0; i < ArrayLength(lib_names); i++) {
lib = dlopen(lib_names[i], RTLD_LAZY | RTLD_GLOBAL);
if (lib)
lib = dlopen(lib_names[i], RTLD_NOLOAD | RTLD_LAZY | RTLD_GLOBAL);
if (lib) {
break;
}
}
if (lib && LoadSymbols())
// If nothing loads the first time through, it means no version of libudev
// was already loaded.
if (!lib) {
for (unsigned i = 0; i < ArrayLength(lib_names); i++) {
lib = dlopen(lib_names[i], RTLD_LAZY | RTLD_GLOBAL);
if (lib) {
break;
}
}
}
if (lib && LoadSymbols()) {
udev = udev_new();
}
}
~udev_lib() {