Index: util/klibrary.cpp =================================================================== --- util/klibrary.cpp (revision 722842) +++ util/klibrary.cpp (working copy) @@ -20,6 +20,7 @@ #include "klibrary.h" #include +#include #include #include @@ -122,6 +123,9 @@ { } +typedef QHash > FactoryHash; +K_GLOBAL_STATIC(FactoryHash, s_createdKde3Factories) + static KPluginFactory* kde3Factory(KLibrary *lib, const QByteArray &factoryname) { QByteArray symname = "init_"; @@ -131,6 +135,13 @@ symname += QFileInfo(lib->fileName()).fileName().split(".").first().toLatin1(); } + if (s_createdKde3Factories->contains(symname)) { + KPluginFactory *factory = s_createdKde3Factories->value(symname); + if (factory) { + return factory; + } + } + typedef KPluginFactory* (*t_func)(); t_func func = reinterpret_cast(lib->resolveFunction( symname )); if ( !func ) @@ -147,6 +158,7 @@ kDebug(150) << "The library" << lib->fileName() << "does not offer a KDE compatible factory."; return 0; } + s_createdKde3Factories->insert(symname, factory); return factory; }