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:
parent
a88b440290
commit
0a202ab77b
@ -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)
|
||||
|
@ -72,6 +72,8 @@ private:
|
||||
virtual void paintEvent(QPaintEvent* event) override;
|
||||
|
||||
private slots:
|
||||
void Clear();
|
||||
|
||||
void EnterEditMode();
|
||||
void ExitEditMode(bool save);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user