0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-19 20:32:15 +02:00

UI: Fix potential race condition

The signal mutex can be locked within other signal mutexes, causing a
potential hard cross-lock when releasing certain sources.  Instead,
defer the Disconnect() call to the UI thread.

This fixes a potential freeze on exit.
This commit is contained in:
jp9000 2018-10-14 23:53:25 -07:00
parent a88b440290
commit 0a202ab77b
2 changed files with 10 additions and 4 deletions

View File

@ -129,6 +129,12 @@ void SourceTreeItem::DisconnectSignals()
removeSignal.Disconnect();
}
void SourceTreeItem::Clear()
{
DisconnectSignals();
sceneitem = nullptr;
}
void SourceTreeItem::ReconnectSignals()
{
if (!sceneitem)
@ -150,10 +156,8 @@ void SourceTreeItem::ReconnectSignals()
Q_ARG(OBSSceneItem, curItem));
curItem = nullptr;
}
if (!curItem) {
this_->DisconnectSignals();
this_->sceneitem = nullptr;
}
if (!curItem)
QMetaObject::invokeMethod(this_, "Clear");
};
auto itemVisible = [] (void *data, calldata_t *cd)

View File

@ -72,6 +72,8 @@ private:
virtual void paintEvent(QPaintEvent* event) override;
private slots:
void Clear();
void EnterEditMode();
void ExitEditMode(bool save);