Browse Source

libobs/util: Fix pthread mutex leaks

jpark37 4 years ago
parent
commit
8a43c55918
2 changed files with 8 additions and 13 deletions
  1. 3 13
      libobs/util/config-file.c
  2. 5 0
      libobs/util/profiler.c

+ 3 - 13
libobs/util/config-file.c

@@ -61,16 +61,6 @@ struct config_data {
 	pthread_mutex_t mutex;
 };
 
-static inline bool init_mutex(config_t *config)
-{
-	pthread_mutexattr_t attr;
-	if (pthread_mutexattr_init(&attr) != 0)
-		return false;
-	if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
-		return false;
-	return pthread_mutex_init(&config->mutex, &attr) == 0;
-}
-
 config_t *config_create(const char *file)
 {
 	struct config_data *config;
@@ -83,7 +73,7 @@ config_t *config_create(const char *file)
 
 	config = bzalloc(sizeof(struct config_data));
 
-	if (!init_mutex(config)) {
+	if (pthread_mutex_init_recursive(&config->mutex) != 0) {
 		bfree(config);
 		return NULL;
 	}
@@ -302,7 +292,7 @@ int config_open(config_t **config, const char *file,
 	if (!*config)
 		return CONFIG_ERROR;
 
-	if (!init_mutex(*config)) {
+	if (pthread_mutex_init_recursive(&(*config)->mutex) != 0) {
 		bfree(*config);
 		return CONFIG_ERROR;
 	}
@@ -330,7 +320,7 @@ int config_open_string(config_t **config, const char *str)
 	if (!*config)
 		return CONFIG_ERROR;
 
-	if (!init_mutex(*config)) {
+	if (pthread_mutex_init_recursive(&(*config)->mutex) != 0) {
 		bfree(*config);
 		return CONFIG_ERROR;
 	}

+ 5 - 0
libobs/util/profiler.c

@@ -825,6 +825,8 @@ void profiler_free(void)
 	}
 
 	da_free(old_root_entries);
+
+	pthread_mutex_destroy(&root_mutex);
 }
 
 /* ------------------------------------------------------------------------- */
@@ -858,6 +860,9 @@ void profiler_name_store_free(profiler_name_store_t *store)
 		bfree(store->names.array[i]);
 
 	da_free(store->names);
+
+	pthread_mutex_destroy(&store->mutex);
+
 	bfree(store);
 }