summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSangki Park <sangki79.park@samsung.com>2017-03-13 18:29:55 +0900
committerNagaraj D R <nagaraj.dr@samsung.com>2017-07-21 17:52:17 +0530
commit2a49c17ffee50b1a8b4f31f4fb1782b6cf998836 (patch)
tree38adb6e882f8fddcdfddaf38eb2d88fa99f3ddc5
parentc441416a2868c44125d0d8d29aeb3619e8881dc0 (diff)
downloadbluez-accepted/tizen_3.0_common.tar.gz
bluez-accepted/tizen_3.0_common.tar.bz2
bluez-accepted/tizen_3.0_common.zip
When BT-FRWK calls this method and error happend in bluez internally, bluez does not reply resulting in BT-FRWK blocked till default dbus timeout Change-Id: Ia1bb5596f3e176a90c3a809abb858fd593719141
-rw-r--r--src/adapter.c45
-rw-r--r--src/adapter.h1
2 files changed, 28 insertions, 18 deletions
diff --git a/src/adapter.c b/src/adapter.c
index 5acea50e..039db58b 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -5172,11 +5172,12 @@ static void le_read_maximum_data_length_return_param_complete(
const struct mgmt_rp_le_read_maximum_data_length *rp = param;
uint16_t max_tx_octects, max_tx_time;
uint16_t max_rx_octects, max_rx_time;
+ int err = 0;
if (!rp) {
error("Error ocurred in Reading maximum data length, rp is NULL");
- g_free(adapter->read_handler);
- return;
+ err = -EIO;
+ goto done;
}
if (status != MGMT_STATUS_SUCCESS) {
@@ -5187,14 +5188,14 @@ static void le_read_maximum_data_length_return_param_complete(
max_rx_octects = 0;
max_rx_time = 0;
- g_free(adapter->read_handler);
- return;
+ err = -EIO;
+ goto done;
}
if (length < sizeof(*rp)) {
error("Too small le read maximum data length response");
- g_free(adapter->read_handler);
- return;
+ err = -EIO;
+ goto done;
} else {
max_tx_octects = rp->max_tx_octets;
max_tx_time =rp->max_tx_time;
@@ -5202,13 +5203,14 @@ static void le_read_maximum_data_length_return_param_complete(
max_rx_time = rp->max_rx_time;
}
+done:
if (!adapter->read_handler ||
!adapter->read_handler->read_callback) {
g_free(adapter->read_handler);
return;
}
- adapter->read_handler->read_callback(adapter,
+ adapter->read_handler->read_callback(adapter, err,
max_tx_octects, max_tx_time,
max_rx_octects, max_rx_time,
adapter->read_handler->user_data);
@@ -5253,6 +5255,7 @@ static struct le_data_length_read_request *find_read_le_data_length_request(
static void le_read_data_length_complete(
struct btd_adapter *adapter,
+ int err,
uint16_t max_tx_octects, uint16_t max_tx_time,
uint16_t max_rx_octects, uint16_t max_rx_time,
void *user_data)
@@ -5261,20 +5264,26 @@ static void le_read_data_length_complete(
struct le_data_length_read_request *read_request;
read_request = find_read_le_data_length_request(adapter);
+
if (!read_request)
return;
- reply = g_dbus_create_reply(read_request->msg,
- DBUS_TYPE_UINT16, &max_tx_octects,
- DBUS_TYPE_UINT16, &max_tx_time,
- DBUS_TYPE_UINT16, &max_rx_octects,
- DBUS_TYPE_UINT16, &max_rx_time,
- DBUS_TYPE_INVALID);
-
- if (!reply) {
- btd_error_failed(read_request->msg,
- "Failed to read max data length.");
- return;
+ if (err) {
+ DBG("Failed to read max data length. errno[%d]", err);
+ reply = btd_error_failed(read_request->msg,
+ "Failed to read max data length");
+ } else {
+ reply = g_dbus_create_reply(read_request->msg,
+ DBUS_TYPE_UINT16, &max_tx_octects,
+ DBUS_TYPE_UINT16, &max_tx_time,
+ DBUS_TYPE_UINT16, &max_rx_octects,
+ DBUS_TYPE_UINT16, &max_rx_time,
+ DBUS_TYPE_INVALID);
+
+ if (!reply) {
+ reply = btd_error_failed(read_request->msg,
+ "Failed to create reply.");
+ }
}
read_requests = g_slist_remove(read_requests, read_request);
diff --git a/src/adapter.h b/src/adapter.h
index 4a0783a0..7019393c 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -312,6 +312,7 @@ int btd_adapter_set_dev_rpa_res_support(struct btd_adapter *adapter,
struct btd_device *device);
typedef void (*read_max_data_length_cb_t) (struct btd_adapter *adapter,
+ int result,
const uint16_t max_txOctects,
const uint16_t max_txTime,
const uint16_t max_rxOctects,