diff options
author | Sangki Park <sangki79.park@samsung.com> | 2017-03-13 18:29:55 +0900 |
---|---|---|
committer | Nagaraj D R <nagaraj.dr@samsung.com> | 2017-07-21 17:52:17 +0530 |
commit | 2a49c17ffee50b1a8b4f31f4fb1782b6cf998836 (patch) | |
tree | 38adb6e882f8fddcdfddaf38eb2d88fa99f3ddc5 | |
parent | c441416a2868c44125d0d8d29aeb3619e8881dc0 (diff) | |
download | bluez-accepted/tizen_3.0_common.tar.gz bluez-accepted/tizen_3.0_common.tar.bz2 bluez-accepted/tizen_3.0_common.zip |
Return error response for 'LEReadMaximumDataLength' methodsubmit/tizen_3.0/20170801.063915accepted/tizen/3.0/wearable/20170803.010911accepted/tizen/3.0/tv/20170803.010858accepted/tizen/3.0/mobile/20170803.010846accepted/tizen/3.0/ivi/20170803.010922accepted/tizen/3.0/common/20170803.140334accepted/tizen_3.0_iviaccepted/tizen_3.0_common
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.c | 45 | ||||
-rw-r--r-- | src/adapter.h | 1 |
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, |