소스 검색

libobs: Fix output shutdown order

When obs_output_actual_stop is called on shutdown, it should wait for
the output to fully stop before doing anything, and then it should wait
for the data capture to end.  The service should not be removed until
after the output has stopped, otherwise it could result in a possible
memory leak on stop.  Packets should be freed last.
jp9000 9 년 전
부모
커밋
e13dd53376
1개의 변경된 파일5개의 추가작업 그리고 3개의 파일을 삭제
  1. 5 3
      libobs/obs-output.c

+ 5 - 3
libobs/obs-output.c

@@ -170,16 +170,18 @@ void obs_output_destroy(obs_output_t *output)
 
 		if (output->valid && active(output))
 			obs_output_actual_stop(output, true, 0);
-		if (output->service)
-			output->service->output = NULL;
 
+		os_event_wait(output->stopping_event);
 		if (data_capture_ending(output))
 			pthread_join(output->end_data_capture_thread, NULL);
-		free_packets(output);
 
+		if (output->service)
+			output->service->output = NULL;
 		if (output->context.data)
 			output->info.destroy(output->context.data);
 
+		free_packets(output);
+
 		if (output->video_encoder) {
 			obs_encoder_remove_output(output->video_encoder,
 					output);