Browse Source

obs-filters: Fix NvAFX mutex leak

jpark37 4 years ago
parent
commit
3d342cd1e1
2 changed files with 18 additions and 4 deletions
  1. 15 1
      plugins/obs-filters/noise-suppress-filter.c
  2. 3 3
      plugins/obs-filters/obs-filters.c

+ 15 - 1
plugins/obs-filters/noise-suppress-filter.c

@@ -140,6 +140,7 @@ struct noise_suppress_data {
 
 #ifdef LIBNVAFX_ENABLED
 /* global mutex for nvafx load functions since they aren't thread-safe */
+bool nvafx_initializer_mutex_initialized;
 pthread_mutex_t nvafx_initializer_mutex;
 #endif
 
@@ -516,7 +517,8 @@ bool load_nvafx(void)
 		return false;
 	}
 
-	pthread_mutex_init(&nvafx_initializer_mutex, NULL);
+	nvafx_initializer_mutex_initialized =
+		pthread_mutex_init(&nvafx_initializer_mutex, NULL) == 0;
 
 #define LOAD_SYM_FROM_LIB(sym, lib, dll)                                    \
 	if (!(sym = (sym##_t)GetProcAddress(lib, #sym))) {                  \
@@ -576,6 +578,18 @@ unload_everything:
 #pragma warning(pop)
 #endif
 
+void unload_nvafx(void)
+{
+#ifdef LIBNVAFX_ENABLED
+	release_lib();
+
+	if (nvafx_initializer_mutex_initialized) {
+		pthread_mutex_destroy(&nvafx_initializer_mutex);
+		nvafx_initializer_mutex_initialized = false;
+	}
+#endif
+}
+
 static void *noise_suppress_create(obs_data_t *settings, obs_source_t *filter)
 {
 	struct noise_suppress_data *ng =

+ 3 - 3
plugins/obs-filters/obs-filters.c

@@ -28,8 +28,8 @@ extern struct obs_source_info async_delay_filter;
 #if NOISEREDUCTION_ENABLED
 extern struct obs_source_info noise_suppress_filter;
 extern struct obs_source_info noise_suppress_filter_v2;
-extern bool load_nvafx();
-extern void release_lib();
+extern bool load_nvafx(void);
+extern void unload_nvafx(void);
 #endif
 extern struct obs_source_info invert_polarity_filter;
 extern struct obs_source_info noise_gate_filter;
@@ -79,6 +79,6 @@ bool obs_module_load(void)
 #ifdef LIBNVAFX_ENABLED
 void obs_module_unload(void)
 {
-	release_lib();
+	unload_nvafx();
 }
 #endif