From b32461d42df3dc11f9dfb46ced695be18f903b27 Mon Sep 17 00:00:00 2001 From: Ravi kumar Veeramally Date: Tue, 19 Nov 2013 16:56:26 +0200 Subject: [PATCH] android: Handle multiple init(register) and cleanup(unregister) calls properly This can be tested with haltest. --- android/a2dp.c | 6 ++++++ android/bluetooth.c | 6 ++++++ android/hidhost.c | 6 ++++++ android/pan.c | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/android/a2dp.c b/android/a2dp.c index 74d00821d..a9e7c6539 100644 --- a/android/a2dp.c +++ b/android/a2dp.c @@ -332,6 +332,9 @@ bool bt_a2dp_register(int sk, const bdaddr_t *addr) DBG(""); + if (notification_sk >= 0) + return false; + bacpy(&adapter_addr, addr); server = bt_io_listen(connect_cb, NULL, NULL, NULL, &err, @@ -365,6 +368,9 @@ void bt_a2dp_unregister(void) { DBG(""); + if (notification_sk < 0) + return; + notification_sk = -1; bt_adapter_remove_record(record_id); diff --git a/android/bluetooth.c b/android/bluetooth.c index 7dc2ec37b..11b9d7663 100644 --- a/android/bluetooth.c +++ b/android/bluetooth.c @@ -2275,6 +2275,9 @@ bool bt_bluetooth_register(int sk) { DBG(""); + if (notification_sk >= 0) + return false; + notification_sk = sk; return true; @@ -2284,5 +2287,8 @@ void bt_bluetooth_unregister(void) { DBG(""); + if (notification_sk < 0) + return; + notification_sk = -1; } diff --git a/android/hidhost.c b/android/hidhost.c index 842b8ad9e..df21f81c9 100644 --- a/android/hidhost.c +++ b/android/hidhost.c @@ -1190,6 +1190,9 @@ bool bt_hid_register(int sk, const bdaddr_t *addr) DBG(""); + if (notification_sk >= 0) + return false; + bacpy(&adapter_addr, addr); ctrl_io = bt_io_listen(connect_cb, NULL, NULL, NULL, &err, @@ -1224,6 +1227,9 @@ void bt_hid_unregister(void) { DBG(""); + if (notification_sk < 0) + return; + notification_sk = -1; if (ctrl_io) { diff --git a/android/pan.c b/android/pan.c index fba86b85c..ada458a26 100644 --- a/android/pan.c +++ b/android/pan.c @@ -95,6 +95,9 @@ bool bt_pan_register(int sk, const bdaddr_t *addr) { DBG(""); + if (notification_sk >= 0) + return false; + notification_sk = sk; return true; @@ -104,5 +107,8 @@ void bt_pan_unregister(void) { DBG(""); + if (notification_sk < 0) + return; + notification_sk = -1; } -- 2.47.3