Skip to content

Commit a53e554

Browse files
committed
fix: *actually* synchronize parameter editor preview calls (fixes crashes)
1 parent ccd01f3 commit a53e554

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

src/hobbits-widgets/abstractparametereditor.h

+10-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include <QWidget>
55
#include <QThread>
6+
#include <QSemaphore>
7+
#include <QSemaphoreReleaser>
68
#include <QtConcurrent/QtConcurrent>
79
#include "bitcontainerpreview.h"
810
#include "pluginactionprogress.h"
@@ -14,6 +16,8 @@ class HOBBITSWIDGETSSHARED_EXPORT AbstractParameterEditor : public QWidget
1416
Q_OBJECT
1517

1618
public:
19+
AbstractParameterEditor() : m_previewSem(2) {}
20+
1721
virtual QString title() = 0;
1822

1923
virtual bool setParameters(QJsonObject parameters) = 0;
@@ -26,7 +30,11 @@ class HOBBITSWIDGETSSHARED_EXPORT AbstractParameterEditor : public QWidget
2630
void previewBits(QSharedPointer<BitContainerPreview> container,
2731
QSharedPointer<PluginActionProgress> progress)
2832
{
29-
QMutexLocker(&this->m_previewLock);
33+
if (!this->m_previewSem.tryAcquire()) {
34+
return;
35+
}
36+
QSemaphoreReleaser releaser(&this->m_previewSem);
37+
QMutexLocker locker(&this->m_previewLock);
3038
if (QThread::currentThread() == this->thread()) {
3139
// Called from UI thread
3240
previewBitsImpl(container, progress);
@@ -76,6 +84,7 @@ protected slots:
7684

7785
private:
7886
QMutex m_previewLock;
87+
QSemaphore m_previewSem;
7988
};
8089

8190
#endif // ABSTRACTPARAMETEREDITOR_H

0 commit comments

Comments
 (0)