OSDN Git Service

android/pan: Unregister ipc handlers if init fails
authorJakub Tyszkowski <jakub.tyszkowski@tieto.com>
Thu, 5 Dec 2013 10:37:14 +0000 (11:37 +0100)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Sun, 8 Dec 2013 15:47:42 +0000 (17:47 +0200)
Add ipc handlers cleanup if init fails. Send proper status if
already initialized.

android/hal-pan.c

index e7b8a20..6aaf8af 100644 (file)
@@ -152,9 +152,13 @@ static bt_status_t pan_disconnect(const bt_bdaddr_t *bd_addr)
 static bt_status_t pan_init(const btpan_callbacks_t *callbacks)
 {
        struct hal_cmd_register_module cmd;
+       int ret;
 
        DBG("");
 
+       if (interface_ready())
+               return BT_STATUS_DONE;
+
        cbs = callbacks;
 
        hal_ipc_register(HAL_SERVICE_ID_PAN, ev_handlers,
@@ -162,8 +166,15 @@ static bt_status_t pan_init(const btpan_callbacks_t *callbacks)
 
        cmd.service_id = HAL_SERVICE_ID_PAN;
 
-       return hal_ipc_cmd(HAL_SERVICE_ID_CORE, HAL_OP_REGISTER_MODULE,
+       ret = hal_ipc_cmd(HAL_SERVICE_ID_CORE, HAL_OP_REGISTER_MODULE,
                                        sizeof(cmd), &cmd, 0, NULL, NULL);
+
+       if (ret != BT_STATUS_SUCCESS) {
+               cbs = NULL;
+               hal_ipc_unregister(HAL_SERVICE_ID_PAN);
+       }
+
+       return ret;
 }
 
 static void pan_cleanup()