diff --git a/src/pipewire/impl-module.c b/src/pipewire/impl-module.c index 23df06cca..561f05c72 100644 --- a/src/pipewire/impl-module.c +++ b/src/pipewire/impl-module.c @@ -323,7 +323,7 @@ void pw_impl_module_destroy(struct pw_impl_module *module) pw_work_queue_cancel(pw_context_get_work_queue(module->context), module, SPA_ID_INVALID); - if (!pw_in_valgrind() && dlclose(impl->hnd) != 0) + if (pw_should_dlclose() && dlclose(impl->hnd) != 0) pw_log_warn("%p: dlclose failed: %s", module, dlerror()); free(impl); } diff --git a/src/pipewire/pipewire.c b/src/pipewire/pipewire.c index ada0d13be..5008164ea 100644 --- a/src/pipewire/pipewire.c +++ b/src/pipewire/pipewire.c @@ -149,7 +149,7 @@ unref_plugin(struct plugin *plugin) if (--plugin->ref == 0) { spa_list_remove(&plugin->link); pw_log_debug("unloaded plugin:'%s'", plugin->filename); - if (global_support.do_dlclose) + if (pw_should_dlclose()) dlclose(plugin->hnd); free(plugin->filename); free(plugin); @@ -791,6 +791,12 @@ bool pw_in_valgrind(void) return global_support.in_valgrind; } +bool +pw_should_dlclose(void) +{ + return global_support.do_dlclose; +} + SPA_EXPORT bool pw_check_option(const char *option, const char *value) { diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 58b2b6085..021a5d5f9 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -1292,6 +1292,8 @@ void pw_settings_init(struct pw_context *context); int pw_settings_expose(struct pw_context *context); void pw_settings_clean(struct pw_context *context); +bool pw_should_dlclose(void); + /** \endcond */ #ifdef __cplusplus