rendered paste bodyIndex: util/klibrary.cpp
===================================================================
--- util/klibrary.cpp (revision 722842)
+++ util/klibrary.cpp (working copy)
@@ -20,6 +20,7 @@
#include "klibrary.h"
#include <QtCore/QDir>
+#include <QtCore/QPointer>
#include <kcomponentdata.h>
#include <kstandarddirs.h>
@@ -122,6 +123,9 @@
{
}
+typedef QHash<QByteArray, QPointer<KPluginFactory> > 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<t_func>(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;
}