clean up modules handles
authorKevron Rees <kevron.m.rees@intel.com>
Fri, 21 Nov 2014 00:52:04 +0000 (16:52 -0800)
committerKevron Rees <kevron.m.rees@intel.com>
Fri, 21 Nov 2014 00:52:04 +0000 (16:52 -0800)
plugins/bluemonkey/bluemonkey.cpp
plugins/bluemonkey/bluemonkey.h

index 081ec31..7709e77 100644 (file)
@@ -105,6 +105,14 @@ BluemonkeySink::BluemonkeySink(AbstractRoutingEngine* e, map<string, string> con
        qmlRegisterType<QObject>("", 1, 0, "QObject");
 }
 
+BluemonkeySink::~BluemonkeySink()
+{
+       Q_FOREACH(void* module, modules)
+       {
+               dlclose(module);
+       }
+}
+
 
 PropertyList BluemonkeySink::subscriptions()
 {
@@ -207,6 +215,11 @@ bool BluemonkeySink::loadModule(QString path)
                return false;
        }
 
+       if(modules.contains(handle))
+               return false;
+
+       modules.push_back(handle);
+
        void* c = dlsym(handle, "create");
 
        if(!c)
@@ -221,8 +234,12 @@ bool BluemonkeySink::loadModule(QString path)
 
        for(auto i : exports)
        {
-               QJSValue val = engine->newQObject(i.second);
-               engine->globalObject().setProperty(i.first.c_str(), val);
+               std::string obj = i.first;
+               if(!engine->globalObject().hasProperty(obj.c_str()))
+               {
+                       QJSValue val = engine->newQObject(i.second);
+                       engine->globalObject().setProperty(obj.c_str(), val);
+               }
        }
 
        return true;
index 8617f7e..b25dacc 100644 (file)
@@ -94,6 +94,7 @@ public:
        using QObject::setProperty;
 
        BluemonkeySink(AbstractRoutingEngine* e, map<string, string> config,  AbstractSource& parent);
+       ~BluemonkeySink();
        virtual PropertyList subscriptions();
        virtual void supportedChanged(const PropertyList & supportedProperties);
        virtual void propertyChanged(AbstractPropertyType* value);
@@ -148,6 +149,7 @@ public Q_SLOTS:
        void createCustomProperty(QString name, QJSValue defaultValue, int zone);
 
 private:
+       QList<void*> modules;
        QJSEngine* engine;
        QStringList configsToLoad;