From a0f30f1186d0a7c3fa7d0dfae18995de6bb09515 Mon Sep 17 00:00:00 2001 From: Seungbae Shin Date: Tue, 5 Jan 2021 00:52:21 +0900 Subject: [PATCH] tizenaudio-policy: unload modules safely when daemon is on shutdown [Version] 13.0.44 [Issue Type] Bug Change-Id: Ib92c5cbff8bb48b40eef5685dc5549894a58cdd8 --- packaging/pulseaudio-modules-tizen.spec | 2 +- src/module-tizenaudio-policy.c | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packaging/pulseaudio-modules-tizen.spec b/packaging/pulseaudio-modules-tizen.spec index c99a785..d76a281 100644 --- a/packaging/pulseaudio-modules-tizen.spec +++ b/packaging/pulseaudio-modules-tizen.spec @@ -1,6 +1,6 @@ Name: pulseaudio-modules-tizen Summary: Pulseaudio modules for Tizen -Version: 13.0.43 +Version: 13.0.44 Release: 0 Group: Multimedia/Audio License: LGPL-2.1+ diff --git a/src/module-tizenaudio-policy.c b/src/module-tizenaudio-policy.c index 43f8bca..a6c1075 100644 --- a/src/module-tizenaudio-policy.c +++ b/src/module-tizenaudio-policy.c @@ -168,8 +168,8 @@ struct userdata { pa_module *module_combine_sink; pa_module *module_combine_sink_for_ex; - pa_module *module_null_sink; - pa_module *module_null_source; + uint32_t module_null_sink_index; + uint32_t module_null_source_index; pa_module *module_loopback; struct { int32_t latency_msec; @@ -1047,8 +1047,8 @@ static void reset_route(struct userdata *u, stream_type_t stream_type) { /* unload combine sink */ if (stream_type == STREAM_SINK_INPUT) { - null_sink = (pa_sink*)pa_namereg_get(u->core, SINK_NAME_NULL, PA_NAMEREG_SINK); - unload_combine_sink_module(u, SINK_NAME_COMBINED, null_sink); + if (null_sink = (pa_sink*)pa_namereg_get(u->core, SINK_NAME_NULL, PA_NAMEREG_SINK)) + unload_combine_sink_module(u, SINK_NAME_COMBINED, null_sink); } route_info.role = "reset"; @@ -1793,6 +1793,7 @@ int pa__init(pa_module *m) pa_modargs *ma = NULL; struct userdata *u; char *args = NULL; + pa_module *module_loaded; pa_assert(m); @@ -1804,6 +1805,8 @@ int pa__init(pa_module *m) m->userdata = u = pa_xnew0(struct userdata, 1); u->core = m->core; u->module = m; + u->module_null_sink_index = PA_INVALID_INDEX; + u->module_null_source_index = PA_INVALID_INDEX; if (!(u->hal_interface = pa_hal_interface_get(u->core))) { pa_log("Failed to get hal interface"); @@ -1826,17 +1829,21 @@ int pa__init(pa_module *m) PA_HOOK_EARLY, (pa_hook_cb_t)update_info_hook_cb, u); } u->device_manager = pa_device_manager_get(u->core); - u->stream_manager = pa_stream_manager_get(u->core); /* load null sink/source */ args = pa_sprintf_malloc("sink_name=%s norewinds=1", SINK_NAME_NULL); - if (pa_module_load(&u->module_null_sink, u->core, MODULE_NULL_SINK, args)) + if (pa_module_load(&module_loaded, u->core, MODULE_NULL_SINK, args)) pa_log_error("failed to load module-null-sink"); + else + u->module_null_sink_index = module_loaded->index; pa_xfree(args); + args = pa_sprintf_malloc("source_name=%s max_latency_msec=100", SOURCE_NAME_NULL); - if (pa_module_load(&u->module_null_source, u->core, MODULE_NULL_SOURCE, args)) + if (pa_module_load(&module_loaded, u->core, MODULE_NULL_SOURCE, args)) pa_log_error("failed to load module-null-source"); + else + u->module_null_source_index = module_loaded->index; pa_xfree(args); __load_dump_config(u); @@ -1865,11 +1872,11 @@ void pa__done(pa_module *m) bt_sco_close(u, false); - if (u->module_null_sink) - pa_module_unload(u->module_null_sink, true); + if (u->module_null_sink_index != PA_INVALID_INDEX) + pa_module_unload_by_index(m->core, u->module_null_sink_index, true); - if (u->module_null_source) - pa_module_unload(u->module_null_source, true); + if (u->module_null_source_index != PA_INVALID_INDEX) + pa_module_unload_by_index(m->core, u->module_null_source_index, true); if (u->device_manager) pa_device_manager_unref(u->device_manager); -- 2.7.4