diff transform/ModelTransformerFactory.cpp @ 1713:978c143c767f

Merge from branch single-point
author Chris Cannam
date Fri, 17 May 2019 10:02:43 +0100
parents b17fb3a4560c
children 8efce64dd85e
line wrap: on
line diff
--- a/transform/ModelTransformerFactory.cpp	Thu May 16 12:54:58 2019 +0100
+++ b/transform/ModelTransformerFactory.cpp	Fri May 17 10:02:43 2019 +0100
@@ -34,6 +34,7 @@
 #include <set>
 
 #include <QRegExp>
+#include <QMutexLocker>
 
 using std::vector;
 
@@ -59,6 +60,8 @@
                                                       sv_frame_t duration,
                                                       UserConfigurator *configurator)
 {
+    QMutexLocker locker(&m_mutex);
+    
     ModelTransformer::Input input(nullptr);
 
     if (candidateInputModels.empty()) return input;
@@ -213,6 +216,8 @@
 {
     SVDEBUG << "ModelTransformerFactory::transformMultiple: Constructing transformer with input model " << input.getModel() << endl;
     
+    QMutexLocker locker(&m_mutex);
+    
     ModelTransformer *t = createTransformer(transforms, input);
     if (!t) return vector<Model *>();
 
@@ -255,6 +260,8 @@
 void
 ModelTransformerFactory::transformerFinished()
 {
+    QMutexLocker locker(&m_mutex);
+    
     QObject *s = sender();
     ModelTransformer *transformer = dynamic_cast<ModelTransformer *>(s);
     
@@ -299,17 +306,21 @@
 {
     TransformerSet affected;
 
-    for (TransformerSet::iterator i = m_runningTransformers.begin();
-         i != m_runningTransformers.end(); ++i) {
+    {
+        QMutexLocker locker(&m_mutex);
+    
+        for (TransformerSet::iterator i = m_runningTransformers.begin();
+             i != m_runningTransformers.end(); ++i) {
 
-        ModelTransformer *t = *i;
+            ModelTransformer *t = *i;
 
-        if (t->getInputModel() == m) {
-            affected.insert(t);
-        } else {
-            vector<Model *> mm = t->getOutputModels();
-            for (int i = 0; i < (int)mm.size(); ++i) {
-                if (mm[i] == m) affected.insert(t);
+            if (t->getInputModel() == m) {
+                affected.insert(t);
+            } else {
+                vector<Model *> mm = t->getOutputModels();
+                for (int i = 0; i < (int)mm.size(); ++i) {
+                    if (mm[i] == m) affected.insert(t);
+                }
             }
         }
     }
@@ -327,3 +338,10 @@
     }
 }
 
+bool
+ModelTransformerFactory::haveRunningTransformers() const
+{
+    QMutexLocker locker(&m_mutex);
+    
+    return (!m_runningTransformers.empty());
+}