# HG changeset patch # User Chris Cannam # Date 1557414064 -3600 # Node ID b17fb3a4560ce7670d2ff7be36e7588a572d13b8 # Parent 81f50b70bdef645adff1adbbaf0567d69d26d388 Add haveRunningTransformers() and mutex diff -r 81f50b70bdef -r b17fb3a4560c transform/ModelTransformerFactory.cpp --- a/transform/ModelTransformerFactory.cpp Tue May 07 15:52:12 2019 +0100 +++ b/transform/ModelTransformerFactory.cpp Thu May 09 16:01:04 2019 +0100 @@ -34,6 +34,7 @@ #include #include +#include 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(); @@ -255,6 +260,8 @@ void ModelTransformerFactory::transformerFinished() { + QMutexLocker locker(&m_mutex); + QObject *s = sender(); ModelTransformer *transformer = dynamic_cast(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 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 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()); +} diff -r 81f50b70bdef -r b17fb3a4560c transform/ModelTransformerFactory.h --- a/transform/ModelTransformerFactory.h Tue May 07 15:52:12 2019 +0100 +++ b/transform/ModelTransformerFactory.h Thu May 09 16:01:04 2019 +0100 @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -145,6 +146,8 @@ QString &message, AdditionalModelHandler *handler = 0); + bool haveRunningTransformers() const; + signals: void transformFailed(QString transformName, QString message); @@ -157,6 +160,8 @@ ModelTransformer *createTransformer(const Transforms &transforms, const ModelTransformer::Input &input); + mutable QMutex m_mutex; + typedef std::map TransformerConfigurationMap; TransformerConfigurationMap m_lastConfigurations;