Browse Source

libobs: Insert sources to linked lists after creation

This fixes a race condition where the audio/video backends/threads may
start using sources before their obs_source_info::create function has
been called.
jp9000 6 years ago
parent
commit
0845844e5d
1 changed files with 7 additions and 3 deletions
  1. 7 3
      libobs/obs-source.c

+ 7 - 3
libobs/obs-source.c

@@ -190,6 +190,12 @@ static bool obs_source_init(struct obs_source *source)
 	source->control->source = source;
 	source->audio_mixers = 0xFF;
 
+	source->private_settings = obs_data_create();
+	return true;
+}
+
+static void obs_source_init_finalize(struct obs_source *source)
+{
 	if (is_audio_source(source)) {
 		pthread_mutex_lock(&obs->data.audio_sources_mutex);
 
@@ -203,11 +209,8 @@ static bool obs_source_init(struct obs_source *source)
 		pthread_mutex_unlock(&obs->data.audio_sources_mutex);
 	}
 
-	source->private_settings = obs_data_create();
-
 	obs_context_data_insert(&source->context, &obs->data.sources_mutex,
 				&obs->data.first_source);
-	return true;
 }
 
 static bool obs_source_hotkey_mute(void *data, obs_hotkey_pair_id id,
@@ -369,6 +372,7 @@ static obs_source_t *obs_source_create_internal(const char *id,
 		obs_source_dosignal(source, "source_create", NULL);
 	}
 
+	obs_source_init_finalize(source);
 	return source;
 
 fail: