From 822bef51f01379b9728d1c156df3f34a6745a34f Mon Sep 17 00:00:00 2001
From: Doug Nazar <nazard@nazar.ca>
Date: Wed, 21 May 2025 09:41:14 -0400
Subject: [PATCH] validate: Fix marking actions done

Don't take extra ref during calling done() from 'stream-selection'
Mark as done actions that are completed immediately

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9042>
---
 .../validate/gst/validate/gst-validate-scenario.c           | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c b/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c
index e34b1e1956..815441126c 100644
--- a/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c
+++ b/subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c
@@ -2312,7 +2312,7 @@ done:
   if (selected_streams && d->message_sid &&
       d->wanted_n_calls >= 1 && d->n_calls == d->wanted_n_calls) {
     /* Consider action done once we get the STREAM_SELECTED signal */
-    gst_validate_action_set_done (gst_validate_action_ref (d->action));
+    gst_validate_action_set_done (d->action);
     gst_bus_disable_sync_message_emission (bus);
     g_signal_handler_disconnect (bus, d->message_sid);
     d->message_sid = 0;
@@ -2348,7 +2348,7 @@ stream_selection_scenario_stopping_cb (GstValidateScenario * scenario,
         d->wanted_n_calls, d->n_calls);
   }
 
-  gst_validate_action_set_done (gst_validate_action_ref (d->action));
+  gst_validate_action_set_done (d->action);
 
   if (bus && d->message_sid) {
     gst_bus_disable_sync_message_emission (bus);
@@ -2912,6 +2912,8 @@ _execute_on_sub_scenario (GstValidateScenario * scenario,
           data->subaction_done_sigid);
       data->subaction_done_sigid = 0;
     }
+
+    gst_validate_action_set_done (subaction);
   }
   g_mutex_unlock (&data->sigid_lock);
   validate_action_foreign_scenario_data_unref (data);