tizenaudio-policy: Do not go forward if audio hal is not ready 54/139954/2 accepted/tizen/4.0/unified/20170816.012503 accepted/tizen/unified/20170724.020314 submit/tizen/20170721.075214 submit/tizen_4.0/20170811.094300
authorSangchul Lee <sc11.lee@samsung.com>
Fri, 21 Jul 2017 06:35:49 +0000 (15:35 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 21 Jul 2017 07:02:49 +0000 (16:02 +0900)
Some codes are also enhanced to forward error properly.

[Version] 5.0.165
[Issue Type] Enhancement

Change-Id: I0cd22638b04779de826b66e9d48e60ee14cf2c80
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/pulseaudio-modules-tizen.spec
src/hal-interface.c
src/module-tizenaudio-policy.c
src/stream-manager.c

index fea097864df1a6115dc591e2d61ad00aa5b00121..f78aa21e3b4770564c597cc335be512506c8eb3a 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          5.0.164
+Version:          5.0.165
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 756125f973f82785eee6cdcdf421c7e75f5c2f53..847bcf926784e32c01d1633f9b114bfe97cfdc77 100644 (file)
@@ -81,8 +81,12 @@ pa_hal_interface* pa_hal_interface_get(pa_core *core) {
         h->intf.add_message_cb = dlsym(h->dl_handle, "audio_add_message_cb");
         h->intf.remove_message_cb = dlsym(h->dl_handle, "audio_remove_message_cb");
         if (h->intf.init) {
-            if (h->intf.init(&h->ah_handle) != AUDIO_RET_OK)
+            if (h->intf.init(&h->ah_handle) != AUDIO_RET_OK) {
                 pa_log_error("hal_interface init failed");
+                dlclose(h->dl_handle);
+                pa_xfree(h);
+                return NULL;
+            }
         }
 
      } else {
@@ -118,9 +122,8 @@ void pa_hal_interface_unref(pa_hal_interface *h) {
             pa_log_error("hal_interface deinit failed");
         }
     }
-    if (h->dl_handle) {
+    if (h->dl_handle)
         dlclose(h->dl_handle);
-    }
 
     if (h->core)
         pa_shared_remove(h->core, SHARED_HAL_INTF);
index 60fab2e7781cac4f51d66b679484ef6a923c3849..abb69a668ef70ac017c43358ea3b7bbbf5cd234a 100644 (file)
@@ -326,6 +326,11 @@ static int bt_sco_close(struct userdata *u, bool delayed_close) {
 
     pa_assert(u);
 
+    if (!u->device_manager) {
+        pa_log_error("device_manager is null");
+        return -1;
+    }
+
     bt_device = _get_sco_connected_device(u->device_manager);
     if (bt_device == NULL) {
         pa_log_debug("No SCO connected bt device");
@@ -1410,7 +1415,11 @@ int pa__init(pa_module *m)
     u->core = m->core;
     u->module = m;
 
-    u->hal_interface = pa_hal_interface_get(u->core);
+    if (!(u->hal_interface = pa_hal_interface_get(u->core))) {
+        pa_log("Failed to get hal interface");
+        pa_modargs_free(ma);
+        goto fail;
+    }
 
     if ((u->communicator.comm = pa_communicator_get(u->core))) {
         u->communicator.comm_hook_select_proper_sink_or_source_slot = pa_hook_connect(
@@ -1462,10 +1471,13 @@ void pa__done(pa_module *m)
     if (!(u = m->userdata))
         return;
 
-    pa_module_unload(u->core, u->module_null_sink, true);
-    u->module_null_sink = NULL;
-    pa_module_unload(u->core, u->module_null_source, true);
-    u->module_null_source = NULL;
+    bt_sco_close(u, false);
+
+    if (u->module_null_sink)
+        pa_module_unload(u->core, u->module_null_sink, true);
+
+    if (u->module_null_source)
+        pa_module_unload(u->core, u->module_null_source, true);
 
     if (u->device_manager)
         pa_device_manager_unref(u->device_manager);
@@ -1488,8 +1500,6 @@ void pa__done(pa_module *m)
     if (u->hal_interface)
         pa_hal_interface_unref(u->hal_interface);
 
-    bt_sco_close(u, false);
-
     pa_xfree(u);
 
     pa_log_info("Tizen Audio Policy module is unloaded\n");
index 9032f9f84c5d1325d61ab27667b0f985004f89e9..0c34580a1f38ba3274d72163da97e1f58972da7a 100644 (file)
@@ -3128,7 +3128,9 @@ pa_stream_manager* pa_stream_manager_init(pa_core *c) {
     m = pa_xnew0(pa_stream_manager, 1);
     m->core = c;
 
-    m->hal = pa_hal_interface_get(c);
+    if (!(m->hal = pa_hal_interface_get(c)))
+        goto fail;
+
     if (pa_hal_interface_add_message_callback(m->hal, message_cb, m))
         pa_log_warn("skip adding message callback");
     m->dm = pa_device_manager_get(c);