diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp index 1376462ff33..03f6eb8d331 100644 --- a/src/corelib/plugin/qlibrary_unix.cpp +++ b/src/corelib/plugin/qlibrary_unix.cpp @@ -257,8 +257,12 @@ bool QLibraryPrivate::load_sys() bool QLibraryPrivate::unload_sys() { -#if !defined(Q_OS_VXWORKS) // Unloading on VxWorks causes crashes in QtDeclarative autotests - if (dlclose(pHnd.loadAcquire())) { + bool doTryUnload = true; +#ifndef RTLD_NODELETE + if (loadHints() & QLibrary::PreventUnloadHint) + doTryUnload = false; +#endif + if (doTryUnload && dlclose(pHnd.loadAcquire())) { const char *error = dlerror(); #if defined (Q_OS_QNX) // Workaround until fixed in QNX; fixes crash in @@ -271,7 +275,6 @@ bool QLibraryPrivate::unload_sys() return false; } errorString.clear(); -#endif return true; }