tizenaudio-policy: unload modules safely when daemon is on shutdown 92/250792/3 accepted/tizen/unified/20210105.125821 submit/tizen/20210105.055441
authorSeungbae Shin <seungbae.shin@samsung.com>
Mon, 4 Jan 2021 15:52:21 +0000 (00:52 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Tue, 5 Jan 2021 03:45:14 +0000 (03:45 +0000)
[Version] 13.0.44
[Issue Type] Bug

Change-Id: Ib92c5cbff8bb48b40eef5685dc5549894a58cdd8

packaging/pulseaudio-modules-tizen.spec
src/module-tizenaudio-policy.c

index c99a785..d76a281 100644 (file)
@@ -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+
index 43f8bca..a6c1075 100644 (file)
@@ -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);