validate: scenario: don't borrow @structure in _fill_action()

@structure was borrowed in some code path and wasn't in some other. Make it
clearer, and fix a leak, by always copying it.
This commit is contained in:
Guillaume Desmottes 2015-03-20 11:39:32 +01:00
parent 9691136887
commit ba175368d1

View file

@ -1075,7 +1075,7 @@ _fill_action (GstValidateScenario * scenario, GstValidateAction * action,
if (!(action->name = gst_structure_get_string (structure, "name"))) if (!(action->name = gst_structure_get_string (structure, "name")))
action->name = ""; action->name = "";
action->structure = structure; action->structure = gst_structure_copy (structure);
if (IS_CONFIG_ACTION_TYPE (action_type->flags)) { if (IS_CONFIG_ACTION_TYPE (action_type->flags)) {
res = action_type->execute (scenario, action); res = action_type->execute (scenario, action);
@ -1112,11 +1112,12 @@ _execute_sub_action_action (GstValidateAction * action)
{ {
const gchar *subaction_str; const gchar *subaction_str;
GstStructure *subaction_struct = NULL; GstStructure *subaction_struct = NULL;
GstValidateExecuteActionReturn res = GST_VALIDATE_EXECUTE_ACTION_OK;
if (action->priv->executing_last_subaction) { if (action->priv->executing_last_subaction) {
action->priv->executing_last_subaction = FALSE; action->priv->executing_last_subaction = FALSE;
return GST_VALIDATE_EXECUTE_ACTION_OK; goto done;
} }
subaction_str = gst_structure_get_string (action->structure, "sub-action"); subaction_str = gst_structure_get_string (action->structure, "sub-action");
@ -1127,7 +1128,8 @@ _execute_sub_action_action (GstValidateAction * action)
GST_VALIDATE_REPORT (action->scenario, SCENARIO_FILE_MALFORMED, GST_VALIDATE_REPORT (action->scenario, SCENARIO_FILE_MALFORMED,
"Sub action %s could not be parsed", subaction_str); "Sub action %s could not be parsed", subaction_str);
return GST_VALIDATE_EXECUTE_ACTION_ERROR; res = GST_VALIDATE_EXECUTE_ACTION_ERROR;
goto done;
} }
} else { } else {
@ -1136,8 +1138,6 @@ _execute_sub_action_action (GstValidateAction * action)
} }
if (subaction_struct) { if (subaction_struct) {
GstValidateExecuteActionReturn res = GST_VALIDATE_EXECUTE_ACTION_OK;
if (action->structure) { if (action->structure) {
GST_INFO_OBJECT (action->scenario, "Clearing old action structure"); GST_INFO_OBJECT (action->scenario, "Clearing old action structure");
gst_structure_free (action->structure); gst_structure_free (action->structure);
@ -1149,21 +1149,24 @@ _execute_sub_action_action (GstValidateAction * action)
"Sub action %" GST_PTR_FORMAT " could not be filled", "Sub action %" GST_PTR_FORMAT " could not be filled",
subaction_struct); subaction_struct);
return GST_VALIDATE_EXECUTE_ACTION_OK; goto done;
} }
if (!GST_CLOCK_TIME_IS_VALID (action->playback_time)) { if (!GST_CLOCK_TIME_IS_VALID (action->playback_time)) {
GstValidateExecuteActionReturn res;
GstValidateActionType *action_type = _find_action_type (action->type); GstValidateActionType *action_type = _find_action_type (action->type);
action->priv->printed = FALSE; action->priv->printed = FALSE;
res = gst_validate_execute_action (action_type, action); res = gst_validate_execute_action (action_type, action);
return res; goto done;
} }
} }
return GST_VALIDATE_EXECUTE_ACTION_OK; done:
if (subaction_struct)
gst_structure_free (subaction_struct);
return res;
} }
@ -1852,16 +1855,12 @@ _load_scenario_file (GstValidateScenario * scenario,
} }
done: done:
if (structures) g_list_free_full (structures, (GDestroyNotify) gst_structure_free);
g_list_free (structures);
return ret; return ret;
failed: failed:
ret = FALSE; ret = FALSE;
if (structures)
g_list_free_full (structures, (GDestroyNotify) gst_structure_free);
structures = NULL;
goto done; goto done;
} }