mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
validate:scenario: Fix the refcount management for actions in structures
Handling the refcounting the same whether the action is blocking or not as we were leaking a ref for non-blocking waits. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/231>
This commit is contained in:
parent
aca781f981
commit
9eb7df7fef
1 changed files with 5 additions and 4 deletions
|
@ -2749,7 +2749,8 @@ stop_waiting_signal (GstStructure * data)
|
||||||
GstValidateScenario *scenario;
|
GstValidateScenario *scenario;
|
||||||
|
|
||||||
gst_structure_get (data, "target", G_TYPE_POINTER, &target,
|
gst_structure_get (data, "target", G_TYPE_POINTER, &target,
|
||||||
"action", G_TYPE_POINTER, &action, "sigid", G_TYPE_UINT, &sigid, NULL);
|
"action", GST_TYPE_VALIDATE_ACTION, &action, "sigid", G_TYPE_UINT, &sigid,
|
||||||
|
NULL);
|
||||||
gst_structure_free (data);
|
gst_structure_free (data);
|
||||||
|
|
||||||
scenario = gst_validate_action_get_scenario (action);
|
scenario = gst_validate_action_get_scenario (action);
|
||||||
|
@ -2765,6 +2766,7 @@ stop_waiting_signal (GstStructure * data)
|
||||||
SCENARIO_UNLOCK (scenario);
|
SCENARIO_UNLOCK (scenario);
|
||||||
|
|
||||||
gst_validate_action_set_done (action);
|
gst_validate_action_set_done (action);
|
||||||
|
gst_validate_action_unref (action);
|
||||||
_add_execute_actions_gsource (scenario);
|
_add_execute_actions_gsource (scenario);
|
||||||
gst_object_unref (scenario);
|
gst_object_unref (scenario);
|
||||||
gst_object_unref (target);
|
gst_object_unref (target);
|
||||||
|
@ -2845,8 +2847,8 @@ _execute_wait_for_signal (GstValidateScenario * scenario,
|
||||||
}
|
}
|
||||||
|
|
||||||
data =
|
data =
|
||||||
gst_structure_new ("a", "action", G_TYPE_POINTER, action, "target",
|
gst_structure_new ("a", "action", GST_TYPE_VALIDATE_ACTION, action,
|
||||||
G_TYPE_POINTER, target, NULL);
|
"target", G_TYPE_POINTER, target, NULL);
|
||||||
SCENARIO_LOCK (scenario);
|
SCENARIO_LOCK (scenario);
|
||||||
priv->signal_handler_id = g_signal_connect_swapped (target, signal_name,
|
priv->signal_handler_id = g_signal_connect_swapped (target, signal_name,
|
||||||
(GCallback) stop_waiting_signal, data);
|
(GCallback) stop_waiting_signal, data);
|
||||||
|
@ -2855,7 +2857,6 @@ _execute_wait_for_signal (GstValidateScenario * scenario,
|
||||||
gst_structure_get_boolean (action->structure, "non-blocking",
|
gst_structure_get_boolean (action->structure, "non-blocking",
|
||||||
&non_blocking);
|
&non_blocking);
|
||||||
if (non_blocking) {
|
if (non_blocking) {
|
||||||
gst_validate_action_ref (action);
|
|
||||||
gst_structure_set (data, "sigid", G_TYPE_UINT, priv->signal_handler_id,
|
gst_structure_set (data, "sigid", G_TYPE_UINT, priv->signal_handler_id,
|
||||||
NULL);
|
NULL);
|
||||||
priv->signal_handler_id = 0;
|
priv->signal_handler_id = 0;
|
||||||
|
|
Loading…
Reference in a new issue