deps/obs-scripting: Fix pthread mutex leaks

master
jpark37 2021-08-23 21:44:34 -07:00
parent b9657f6239
commit bc7ecd4527
3 changed files with 17 additions and 26 deletions

View File

@ -641,11 +641,7 @@ static int obs_lua_register_source(lua_State *script)
if (!existing) {
ls.data = current_lua_script;
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);
pthread_mutex_init_recursive(&ls.definition_mutex);
info.type_data = bmemdup(&ls, sizeof(ls));
info.free_type_data = obs_lua_source_free_type_data;

View File

@ -55,10 +55,10 @@ package.path = package.path .. \";\" .. script_path() .. \"/?.lua\"\n";
static char *startup_script = NULL;
static pthread_mutex_t tick_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t tick_mutex;
static struct obs_lua_script *first_tick_script = NULL;
pthread_mutex_t lua_source_def_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lua_source_def_mutex;
#define ls_get_libobs_obj(type, lua_index, obs_obj) \
ls_get_libobs_obj_(script, #type " *", lua_index, obs_obj, NULL, \
@ -242,7 +242,7 @@ struct lua_obs_timer {
uint64_t interval;
};
static pthread_mutex_t timer_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t timer_mutex;
static struct lua_obs_timer *first_timer = NULL;
static inline void lua_obs_timer_init(struct lua_obs_timer *timer)
@ -1119,12 +1119,9 @@ obs_script_t *obs_lua_script_create(const char *path, obs_data_t *settings)
data->base.type = OBS_SCRIPT_LANG_LUA;
data->tick = LUA_REFNIL;
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutex_init_value(&data->mutex);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
if (pthread_mutex_init(&data->mutex, &attr) != 0) {
if (pthread_mutex_init_recursive(&data->mutex) != 0) {
bfree(data);
return NULL;
}
@ -1300,12 +1297,8 @@ void obs_lua_load(void)
struct dstr dep_paths = {0};
struct dstr tmp = {0};
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&tick_mutex, NULL);
pthread_mutex_init(&timer_mutex, &attr);
pthread_mutex_init_recursive(&timer_mutex);
pthread_mutex_init(&lua_source_def_mutex, NULL);
/* ---------------------------------------------- */

View File

@ -53,8 +53,9 @@ static wchar_t home_path[1024] = {0};
DARRAY(char *) python_paths;
static bool python_loaded = false;
static bool mutexes_loaded = false;
static pthread_mutex_t tick_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t tick_mutex;
static struct obs_python_script *first_tick_script = NULL;
static PyObject *py_obspython = NULL;
@ -378,7 +379,7 @@ struct python_obs_timer {
uint64_t interval;
};
static pthread_mutex_t timer_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t timer_mutex;
static struct python_obs_timer *first_timer = NULL;
static inline void python_obs_timer_init(struct python_obs_timer *timer)
@ -1570,12 +1571,10 @@ void obs_python_load(void)
{
da_init(python_paths);
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&tick_mutex, NULL);
pthread_mutex_init(&timer_mutex, &attr);
pthread_mutex_init_recursive(&timer_mutex);
mutexes_loaded = true;
}
extern void add_python_frontend_funcs(PyObject *module);
@ -1702,6 +1701,11 @@ out:
void obs_python_unload(void)
{
if (mutexes_loaded) {
pthread_mutex_destroy(&tick_mutex);
pthread_mutex_destroy(&timer_mutex);
}
if (!python_loaded_at_all)
return;
@ -1720,8 +1724,6 @@ void obs_python_unload(void)
bfree(python_paths.array[i]);
da_free(python_paths);
pthread_mutex_destroy(&tick_mutex);
pthread_mutex_destroy(&timer_mutex);
dstr_free(&cur_py_log_chunk);
python_loaded_at_all = false;