@@ -43,6 +43,7 @@ struct source_record_filter_context {
43
43
int audio_track ;
44
44
obs_weak_source_t * audio_source ;
45
45
bool closing ;
46
+ bool exiting ;
46
47
long long replay_buffer_duration ;
47
48
struct vec4 backgroundColor ;
48
49
bool remove_after_record ;
@@ -292,9 +293,13 @@ void release_output_stopped(void *data, calldata_t *cd)
292
293
{
293
294
UNUSED_PARAMETER (cd );
294
295
struct stop_output * so = data ;
295
- run_queued ((obs_task_t )obs_output_release , so -> output );
296
+ if (!so -> context -> exiting )
297
+ run_queued ((obs_task_t )obs_output_release , so -> output );
296
298
if (so -> context -> encoder || so -> context -> audioEncoder [0 ])
297
- run_queued (release_encoders , so -> context );
299
+ if (so -> context -> exiting )
300
+ release_encoders (so -> context );
301
+ else
302
+ run_queued (release_encoders , so -> context );
298
303
bfree (data );
299
304
}
300
305
@@ -1019,8 +1024,11 @@ static void frontend_event(enum obs_frontend_event event, void *data)
1019
1024
context -> last_frontend_event = (int )event ;
1020
1025
1021
1026
obs_queue_task (OBS_TASK_GRAPHICS , update_task , data , false);
1022
- } else if (event == OBS_FRONTEND_EVENT_EXIT || event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP ||
1023
- event == OBS_FRONTEND_EVENT_SCRIPTING_SHUTDOWN ) {
1027
+ } else if (event == OBS_FRONTEND_EVENT_EXIT || event == OBS_FRONTEND_EVENT_SCRIPTING_SHUTDOWN ) {
1028
+ context -> closing = true;
1029
+ context -> exiting = true;
1030
+ obs_source_update (context -> source , NULL );
1031
+ } else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP ) {
1024
1032
context -> closing = true;
1025
1033
obs_source_update (context -> source , NULL );
1026
1034
}
0 commit comments