Parcourir la source

obs-scripting: Use a recursive mutex for Lua scripting

This enables stacking of Lua driven filters of the same kind without
freezing OBS Studio in place, or even crashing.
Michael Fabian 'Xaymar' Dirks il y a 6 ans
Parent
commit
cdc613a5ea
1 fichiers modifiés avec 6 ajouts et 1 suppressions
  1. 6 1
      deps/obs-scripting/obs-scripting-lua-source.c

+ 6 - 1
deps/obs-scripting/obs-scripting-lua-source.c

@@ -641,7 +641,12 @@ static int obs_lua_register_source(lua_State *script)
 	if (!existing) {
 	if (!existing) {
 		ls.data = current_lua_script;
 		ls.data = current_lua_script;
 
 
-		pthread_mutex_init(&ls.definition_mutex, NULL);
+		pthread_mutexattr_t mutexattr;
+		pthread_mutexattr_init(&mutexattr);
+		pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
+		pthread_mutex_init(&ls.definition_mutex, &mutexattr);
+		pthread_mutexattr_destroy(&mutexattr);
+
 		info.type_data = bmemdup(&ls, sizeof(ls));
 		info.type_data = bmemdup(&ls, sizeof(ls));
 		info.free_type_data = obs_lua_source_free_type_data;
 		info.free_type_data = obs_lua_source_free_type_data;
 		info.get_name = obs_lua_source_get_name;
 		info.get_name = obs_lua_source_get_name;