From 33e8a23386fadefb722d8e103e40674ae792fa14 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 31 May 2025 21:03:32 -0500 Subject: [PATCH] frontend: Auto release OBSDataArray objects Makes sure that all obs data array objects in cpp files are using auto release RAII wrappers. --- frontend/utility/GoLiveAPI_CensoredJson.cpp | 3 +-- frontend/widgets/OBSBasic_SceneCollections.cpp | 10 ++++------ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/frontend/utility/GoLiveAPI_CensoredJson.cpp b/frontend/utility/GoLiveAPI_CensoredJson.cpp index fc14bd372..539dc6de4 100644 --- a/frontend/utility/GoLiveAPI_CensoredJson.cpp +++ b/frontend/utility/GoLiveAPI_CensoredJson.cpp @@ -25,9 +25,8 @@ void censorRecurse(obs_data_t *data) censorRecurse(child_data); obs_data_release(child_data); } else if (typ == OBS_DATA_ARRAY) { - obs_data_array_t *child_array = obs_data_item_get_array(item); + OBSDataArrayAutoRelease child_array = obs_data_item_get_array(item); censorRecurseArray(child_array); - obs_data_array_release(child_array); } } } diff --git a/frontend/widgets/OBSBasic_SceneCollections.cpp b/frontend/widgets/OBSBasic_SceneCollections.cpp index b637c861d..88a4a6e6e 100644 --- a/frontend/widgets/OBSBasic_SceneCollections.cpp +++ b/frontend/widgets/OBSBasic_SceneCollections.cpp @@ -834,7 +834,7 @@ static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder, obs_data_array }; using FilterAudioSources_t = decltype(FilterAudioSources); - obs_data_array_t *sourcesArray = obs_save_sources_filtered( + OBSDataArrayAutoRelease sourcesArray = obs_save_sources_filtered( [](void *data, obs_source_t *source) { auto &func = *static_cast(data); return func(source); @@ -845,7 +845,7 @@ static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder, obs_data_array /* save group sources separately */ /* saving separately ensures they won't be loaded in older versions */ - obs_data_array_t *groupsArray = obs_save_sources_filtered( + OBSDataArrayAutoRelease groupsArray = obs_save_sources_filtered( [](void *, obs_source_t *source) { return obs_source_is_group(source); }, nullptr); /* -------------------------------- */ @@ -861,14 +861,12 @@ static obs_data_t *GenerateSaveData(obs_data_array_t *sceneOrder, obs_data_array obs_data_set_string(saveData, "current_program_scene", programName); obs_data_set_array(saveData, "scene_order", sceneOrder); obs_data_set_string(saveData, "name", sceneCollection); - obs_data_set_array(saveData, "sources", sourcesArray); - obs_data_set_array(saveData, "groups", groupsArray); + obs_data_set_array(saveData, "sources", sourcesArray.Get()); + obs_data_set_array(saveData, "groups", groupsArray.Get()); obs_data_set_array(saveData, "quick_transitions", quickTransitionData); obs_data_set_array(saveData, "transitions", transitions); obs_data_set_array(saveData, "saved_projectors", savedProjectorList); obs_data_set_array(saveData, "canvases", savedCanvases); - obs_data_array_release(sourcesArray); - obs_data_array_release(groupsArray); obs_data_set_string(saveData, "current_transition", obs_source_get_name(transition)); obs_data_set_int(saveData, "transition_duration", transitionDuration);