GstEnginePipeline: Fix possible race condition in pipeline destructor

Wait for ongoing state changes to complete before setting pipeline to NULL.
This prevents race conditions with async state transitions that can cause crashes in GStreamer elements.

Fixes #1875
This commit is contained in:
Jonas Kvinge
2025-12-20 01:28:53 +01:00
parent 527ccd212a
commit b9b70399d8
2 changed files with 34 additions and 0 deletions

View File

@@ -385,6 +385,10 @@ class GstEnginePipeline : public QObject {
mutex_protected<GstState> last_set_state_in_progress_;
mutex_protected<GstState> last_set_state_async_in_progress_;
// Track futures for this pipeline's state changes to allow waiting for them in destructor
QList<QFuture<GstStateChangeReturn>> pending_state_changes_;
QMutex mutex_pending_state_changes_;
};
using GstEnginePipelinePtr = QSharedPointer<GstEnginePipeline>;