bt_status_t btif_sock_init(void) { assert(thread_handle == -1); assert(thread == NULL); btsock_thread_init(); thread_handle = btsock_thread_create(btsock_signaled, NULL); if (thread_handle == -1) { LOG_ERROR("%s unable to create btsock_thread.", __func__); goto error; } bt_status_t status = btsock_rfc_init(thread_handle); if (status != BT_STATUS_SUCCESS) { LOG_ERROR("%s error initializing RFCOMM sockets: %d", __func__, status); goto error; } status = btsock_l2cap_init(thread_handle); if (status != BT_STATUS_SUCCESS) { LOG_ERROR("%s error initializing L2CAP sockets: %d", __func__, status); goto error; } thread = thread_new("btif_sock"); if (!thread) { LOG_ERROR("%s error creating new thread.", __func__); btsock_rfc_cleanup(); goto error; } status = btsock_sco_init(thread); if (status != BT_STATUS_SUCCESS) { LOG_ERROR("%s error initializing SCO sockets: %d", __func__, status); btsock_rfc_cleanup(); goto error; } return BT_STATUS_SUCCESS; error:; thread_free(thread); thread = NULL; if (thread_handle != -1) btsock_thread_exit(thread_handle); thread_handle = -1; return BT_STATUS_FAIL; }
void btif_sock_cleanup(void) { if (thread_handle == -1) return; thread_stop(thread); thread_join(thread); btsock_thread_exit(thread_handle); btsock_rfc_cleanup(); btsock_sco_cleanup(); btsock_l2cap_cleanup(); thread_free(thread); thread_handle = -1; thread = NULL; }
void btif_sock_cleanup() { btsock_rfc_cleanup(); BTIF_TRACE_DEBUG0("leaving"); }