summaryrefslogtreecommitdiffstats
path: root/btif/src
diff options
context:
space:
mode:
Diffstat (limited to 'btif/src')
-rw-r--r--btif/src/btif_core.c5
-rw-r--r--btif/src/btif_dm.c3
-rw-r--r--btif/src/btif_hh.c4
-rw-r--r--btif/src/btif_hl.c14
-rw-r--r--btif/src/btif_pan.c22
-rw-r--r--btif/src/btif_rc.c19
-rw-r--r--btif/src/btif_sock_l2cap.c10
-rw-r--r--btif/src/btif_sock_rfc.c14
-rw-r--r--btif/src/btif_sock_thread.c20
-rw-r--r--btif/src/btif_sock_util.c6
10 files changed, 59 insertions, 58 deletions
diff --git a/btif/src/btif_core.c b/btif/src/btif_core.c
index 6db10762c..ba717bb48 100644
--- a/btif/src/btif_core.c
+++ b/btif/src/btif_core.c
@@ -29,6 +29,7 @@
#include <ctype.h>
#include <cutils/properties.h>
#include <dirent.h>
+#include <errno.h>
#include <fcntl.h>
#include <hardware/bluetooth.h>
#include <stdlib.h>
@@ -413,10 +414,10 @@ static void btif_fetch_local_bdaddr(bt_bdaddr_t *local_addr)
BTIF_TRACE_DEBUG("%s, local bdaddr is stored in %s", __func__, val);
- if ((addr_fd = open(val, O_RDONLY)) != -1)
+ if ((addr_fd = TEMP_FAILURE_RETRY(open(val, O_RDONLY))) != -1)
{
memset(val, 0, sizeof(val));
- read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN);
+ TEMP_FAILURE_RETRY(read(addr_fd, val, FACTORY_BT_BDADDR_STORAGE_LEN));
/* If this is not a reserved/special bda, then use it */
if ((string_to_bdaddr(val, local_addr)) &&
(memcmp(local_addr->address, null_bdaddr, BD_ADDR_LEN) != 0))
diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c
index 34b8077ea..ca114fa8f 100644
--- a/btif/src/btif_dm.c
+++ b/btif/src/btif_dm.c
@@ -30,6 +30,7 @@
#define LOG_TAG "bt_btif_dm"
#include <assert.h>
+#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -2028,7 +2029,7 @@ static void btif_dm_upstreams_evt(UINT16 event, char* p_param)
BTIF_TRACE_ERROR("Received H/W Error. ");
/* Flush storage data */
btif_config_flush();
- usleep(100000); /* 100milliseconds */
+ TEMP_FAILURE_RETRY(usleep(100000)); /* 100milliseconds */
/* Killing the process to force a restart as part of fault tolerance */
kill(getpid(), SIGKILL);
break;
diff --git a/btif/src/btif_hh.c b/btif/src/btif_hh.c
index 88e767a91..e78bfc234 100644
--- a/btif/src/btif_hh.c
+++ b/btif/src/btif_hh.c
@@ -237,7 +237,7 @@ static void toggle_os_keylockstates(int fd, int changedlockstates)
BTIF_TRACE_DEBUG("%s: %x %x %x", __FUNCTION__,
hidreport[6], hidreport[7], hidreport[8]);
bta_hh_co_write(fd , hidreport, sizeof(hidreport));
- usleep(200000);
+ TEMP_FAILURE_RETRY(usleep(200000));
memset(hidreport,0,9);
hidreport[0]=1;
BTIF_TRACE_DEBUG("Writing hidreport #2 to os: "\
@@ -332,7 +332,7 @@ static void sync_lockstate_on_connect(btif_hh_device_t *p_dev)
BTIF_TRACE_DEBUG("%s: Sending hid report to kernel "\
"indicating lock key state 0x%x",__FUNCTION__,
keylockstates);
- usleep(200000);
+ TEMP_FAILURE_RETRY(usleep(200000));
toggle_os_keylockstates(p_dev->fd, keylockstates);
}
else
diff --git a/btif/src/btif_hl.c b/btif/src/btif_hl.c
index d9e0d1f46..cbce15f7b 100644
--- a/btif/src/btif_hl.c
+++ b/btif/src/btif_hl.c
@@ -4795,8 +4795,8 @@ void btif_hl_select_monitor_callback(fd_set *p_cur_set ,fd_set *p_org_set) {
}
p_dcb->p_tx_pkt = btif_hl_get_buf (p_dcb->mtu);
if (p_dcb) {
- int r = (int)recv(p_scb->socket_id[1], p_dcb->p_tx_pkt,
- p_dcb->mtu, MSG_DONTWAIT);
+ int r = (int)TEMP_FAILURE_RETRY(recv(p_scb->socket_id[1], p_dcb->p_tx_pkt,
+ p_dcb->mtu, MSG_DONTWAIT));
if (r > 0) {
BTIF_TRACE_DEBUG("btif_hl_select_monitor_callback send data r =%d", r);
p_dcb->tx_size = r;
@@ -4852,7 +4852,7 @@ static inline int btif_hl_select_wakeup_init(fd_set* set){
static inline int btif_hl_select_wakeup(void){
char sig_on = btif_hl_signal_select_wakeup;
BTIF_TRACE_DEBUG("btif_hl_select_wakeup");
- return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
+ return TEMP_FAILURE_RETRY(send(signal_fds[1], &sig_on, sizeof(sig_on), 0));
}
/*******************************************************************************
@@ -4867,7 +4867,7 @@ static inline int btif_hl_select_wakeup(void){
static inline int btif_hl_select_close_connected(void){
char sig_on = btif_hl_signal_select_close_connected;
BTIF_TRACE_DEBUG("btif_hl_select_close_connected");
- return send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
+ return TEMP_FAILURE_RETRY(send(signal_fds[1], &sig_on, sizeof(sig_on), 0));
}
/*******************************************************************************
@@ -4884,7 +4884,7 @@ static inline int btif_hl_close_select_thread(void)
int result = 0;
char sig_on = btif_hl_signal_select_exit;
BTIF_TRACE_DEBUG("btif_hl_signal_select_exit");
- result = send(signal_fds[1], &sig_on, sizeof(sig_on), 0);
+ result = TEMP_FAILURE_RETRY(send(signal_fds[1], &sig_on, sizeof(sig_on), 0));
if (btif_is_enabled())
{
/* Wait for the select_thread_id to exit if BT is still enabled
@@ -4911,7 +4911,7 @@ static inline int btif_hl_select_wake_reset(void){
char sig_recv = 0;
BTIF_TRACE_DEBUG("btif_hl_select_wake_reset");
- recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
+ TEMP_FAILURE_RETRY(recv(signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL));
return(int)sig_recv;
}
/*******************************************************************************
@@ -4972,7 +4972,7 @@ static void *btif_hl_select_thread(void *arg){
BTIF_TRACE_DEBUG("set curr_set = org_set ");
curr_set = org_set;
max_curr_s = max_org_s;
- int ret = select((max_curr_s + 1), &curr_set, NULL, NULL, NULL);
+ int ret = TEMP_FAILURE_RETRY(select((max_curr_s + 1), &curr_set, NULL, NULL, NULL));
BTIF_TRACE_DEBUG("select unblocked ret=%d", ret);
if (ret == -1)
{
diff --git a/btif/src/btif_pan.c b/btif/src/btif_pan.c
index 377843822..69f28a00b 100644
--- a/btif/src/btif_pan.c
+++ b/btif/src/btif_pan.c
@@ -312,7 +312,7 @@ static int tap_if_up(const char *devname, const bt_bdaddr_t *addr)
//set mac addr
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, devname, IFNAMSIZ - 1);
- err = ioctl(sk, SIOCGIFHWADDR, &ifr);
+ err = TEMP_FAILURE_RETRY(ioctl(sk, SIOCGIFHWADDR, &ifr));
if (err < 0)
{
BTIF_TRACE_ERROR("Could not get network hardware for interface:%s, errno:%s", devname, strerror(errno));
@@ -333,7 +333,7 @@ static int tap_if_up(const char *devname, const bt_bdaddr_t *addr)
ifr.ifr_hwaddr.sa_data[0] &= ~0x01;
}
- err = ioctl(sk, SIOCSIFHWADDR, (caddr_t)&ifr);
+ err = TEMP_FAILURE_RETRY(ioctl(sk, SIOCSIFHWADDR, (caddr_t)&ifr));
if (err < 0) {
BTIF_TRACE_ERROR("Could not set bt address for interface:%s, errno:%s", devname, strerror(errno));
@@ -348,7 +348,7 @@ static int tap_if_up(const char *devname, const bt_bdaddr_t *addr)
ifr.ifr_flags |= IFF_UP;
ifr.ifr_flags |= IFF_MULTICAST;
- err = ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr);
+ err = TEMP_FAILURE_RETRY(ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr));
if (err < 0) {
@@ -375,7 +375,7 @@ static int tap_if_down(const char *devname)
ifr.ifr_flags &= ~IFF_UP;
- ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr);
+ TEMP_FAILURE_RETRY(ioctl(sk, SIOCSIFFLAGS, (caddr_t) &ifr));
close(sk);
@@ -401,7 +401,7 @@ int btpan_tap_open()
/* open the clone device */
- if ((fd = open(clonedev, O_RDWR)) < 0)
+ if ((fd = TEMP_FAILURE_RETRY(open(clonedev, O_RDWR))) < 0)
{
BTIF_TRACE_DEBUG("could not open %s, err:%d", clonedev, errno);
return fd;
@@ -413,7 +413,7 @@ int btpan_tap_open()
strncpy(ifr.ifr_name, TAP_IF_NAME, IFNAMSIZ);
/* try to create the device */
- if ((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0)
+ if ((err = TEMP_FAILURE_RETRY(ioctl(fd, TUNSETIFF, (void *) &ifr))) < 0)
{
BTIF_TRACE_DEBUG("ioctl error:%d, errno:%s", err, strerror(errno));
close(fd);
@@ -421,8 +421,8 @@ int btpan_tap_open()
}
if (tap_if_up(TAP_IF_NAME, controller_get_interface()->get_address()) == 0)
{
- int flags = fcntl(fd, F_GETFL, 0);
- fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ int flags = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFL, 0));
+ TEMP_FAILURE_RETRY(fcntl(fd, F_SETFL, flags | O_NONBLOCK));
return fd;
}
BTIF_TRACE_ERROR("can not bring up tap interface:%s", TAP_IF_NAME);
@@ -451,7 +451,7 @@ int btpan_tap_send(int tap_fd, const BD_ADDR src, const BD_ADDR dst, UINT16 prot
memcpy(packet + sizeof(tETH_HDR), buf, len);
/* Send data to network interface */
- int ret = write(tap_fd, packet, len + sizeof(tETH_HDR));
+ int ret = TEMP_FAILURE_RETRY(write(tap_fd, packet, len + sizeof(tETH_HDR)));
BTIF_TRACE_DEBUG("ret:%d", ret);
return ret;
}
@@ -742,7 +742,7 @@ static void btu_exec_tap_fd_read(void *p_param) {
// We save it in the congest_packet right away in case we can't deliver it in this
// attempt.
if (!btpan_cb.congest_packet_size) {
- ssize_t ret = read(fd, btpan_cb.congest_packet, sizeof(btpan_cb.congest_packet));
+ ssize_t ret = TEMP_FAILURE_RETRY(read(fd, btpan_cb.congest_packet, sizeof(btpan_cb.congest_packet)));
switch (ret) {
case -1:
BTIF_TRACE_ERROR("%s unable to read from driver: %s", __func__, strerror(errno));
@@ -786,7 +786,7 @@ static void btu_exec_tap_fd_read(void *p_param) {
ufd.fd = fd;
ufd.events = POLLIN;
ufd.revents = 0;
- if (poll(&ufd, 1, 0) <= 0 || IS_EXCEPTION(ufd.revents))
+ if (TEMP_FAILURE_RETRY(poll(&ufd, 1, 0)) <= 0 || IS_EXCEPTION(ufd.revents))
break;
}
if (btpan_cb.flow) {
diff --git a/btif/src/btif_rc.c b/btif/src/btif_rc.c
index 4a83c269d..63b311e64 100644
--- a/btif/src/btif_rc.c
+++ b/btif/src/btif_rc.c
@@ -28,6 +28,7 @@
* Description: Bluetooth AVRC implementation
*
*****************************************************************************/
+#include <errno.h>
#include <hardware/bluetooth.h>
#include <fcntl.h>
#include <string.h>
@@ -317,7 +318,7 @@ int send_event (int fd, uint16_t type, uint16_t code, int32_t value)
event.code = code;
event.value = value;
- return write(fd, &event, sizeof(event));
+ return TEMP_FAILURE_RETRY(write(fd, &event, sizeof(event)));
}
void send_key (int fd, uint16_t key, int pressed)
@@ -356,7 +357,7 @@ int uinput_create(char *name)
for(x=0; x < MAX_UINPUT_PATHS; x++)
{
- fd = open(uinput_dev_path[x], O_RDWR);
+ fd = TEMP_FAILURE_RETRY(open(uinput_dev_path[x], O_RDWR));
if (fd < 0)
continue;
break;
@@ -374,20 +375,20 @@ int uinput_create(char *name)
dev.id.product = 0x0000;
dev.id.version = 0x0000;
- if (write(fd, &dev, sizeof(dev)) < 0) {
+ if (TEMP_FAILURE_RETRY(write(fd, &dev, sizeof(dev))) < 0) {
BTIF_TRACE_ERROR("%s Unable to write device information", __FUNCTION__);
close(fd);
return -1;
}
- ioctl(fd, UI_SET_EVBIT, EV_KEY);
- ioctl(fd, UI_SET_EVBIT, EV_REL);
- ioctl(fd, UI_SET_EVBIT, EV_SYN);
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_EVBIT, EV_KEY));
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_EVBIT, EV_REL));
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_EVBIT, EV_SYN));
for (x = 0; key_map[x].name != NULL; x++)
- ioctl(fd, UI_SET_KEYBIT, key_map[x].mapped_id);
+ TEMP_FAILURE_RETRY(ioctl(fd, UI_SET_KEYBIT, key_map[x].mapped_id));
- if (ioctl(fd, UI_DEV_CREATE, NULL) < 0) {
+ if (TEMP_FAILURE_RETRY(ioctl(fd, UI_DEV_CREATE, NULL)) < 0) {
BTIF_TRACE_ERROR("%s Unable to create uinput device", __FUNCTION__);
close(fd);
return -1;
@@ -425,7 +426,7 @@ void close_uinput (void)
// Since we support Dual AVRCP conn now.
BTIF_TRACE_DEBUG("%s", __FUNCTION__);
if (uinput_fd > 0) {
- ioctl(uinput_fd, UI_DEV_DESTROY);
+ TEMP_FAILURE_RETRY(ioctl(uinput_fd, UI_DEV_DESTROY));
close(uinput_fd);
uinput_fd = -1;
diff --git a/btif/src/btif_sock_l2cap.c b/btif/src/btif_sock_l2cap.c
index 93ba9be61..f4f152953 100644
--- a/btif/src/btif_sock_l2cap.c
+++ b/btif/src/btif_sock_l2cap.c
@@ -979,7 +979,7 @@ static BOOLEAN flush_incoming_que_on_wr_signal_l(l2cap_socket *sock)
uint32_t len;
while (packet_get_head_l(sock, &buf, &len)) {
- int sent = send(sock->our_fd, buf, len, MSG_DONTWAIT);
+ int sent = TEMP_FAILURE_RETRY(send(sock->our_fd, buf, len, MSG_DONTWAIT));
if (sent == (signed)len)
osi_free(buf);
@@ -1013,7 +1013,7 @@ void btsock_l2cap_signaled(int fd, int flags, uint32_t user_id)
if (sock->connected) {
int size = 0;
- if (!(flags & SOCK_THREAD_FD_EXCEPTION) || (ioctl(sock->our_fd, FIONREAD, &size)
+ if (!(flags & SOCK_THREAD_FD_EXCEPTION) || (TEMP_FAILURE_RETRY(ioctl(sock->our_fd, FIONREAD, &size))
== 0 && size)) {
uint8_t *buffer = osi_malloc(L2CAP_MAX_SDU_LENGTH);
//uint8_t *buffer = (uint8_t*)GKI_getbuf(L2CAP_MAX_SDU_LENGTH);
@@ -1039,8 +1039,8 @@ void btsock_l2cap_signaled(int fd, int flags, uint32_t user_id)
* UPDATE: Since we are responsible for freeing the buffer in the
* write_complete_ind, it is OK to use malloc. */
- int count = recv(fd, buffer, L2CAP_MAX_SDU_LENGTH,
- MSG_NOSIGNAL | MSG_DONTWAIT);
+ int count = TEMP_FAILURE_RETRY(recv(fd, buffer, L2CAP_MAX_SDU_LENGTH,
+ MSG_NOSIGNAL | MSG_DONTWAIT));
APPL_TRACE_DEBUG("btsock_l2cap_signaled - %d bytes received from socket",
count);
if (sock->fixed_chan) {
@@ -1072,7 +1072,7 @@ void btsock_l2cap_signaled(int fd, int flags, uint32_t user_id)
}
if (drop_it || (flags & SOCK_THREAD_FD_EXCEPTION)) {
int size = 0;
- if (drop_it || ioctl(sock->our_fd, FIONREAD, &size) != 0 || size == 0)
+ if (drop_it || TEMP_FAILURE_RETRY(ioctl(sock->our_fd, FIONREAD, &size)) != 0 || size == 0)
btsock_l2cap_free_l(sock);
}
}
diff --git a/btif/src/btif_sock_rfc.c b/btif/src/btif_sock_rfc.c
index c352966ef..059b62c0f 100644
--- a/btif/src/btif_sock_rfc.c
+++ b/btif/src/btif_sock_rfc.c
@@ -840,7 +840,7 @@ static sent_status_t send_data_to_app(int fd, BT_HDR *p_buf) {
if (p_buf->len == 0)
return SENT_ALL;
- ssize_t sent = send(fd, p_buf->data + p_buf->offset, p_buf->len, MSG_DONTWAIT);
+ ssize_t sent = TEMP_FAILURE_RETRY(send(fd, p_buf->data + p_buf->offset, p_buf->len, MSG_DONTWAIT));
if (sent == -1) {
if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
@@ -903,11 +903,9 @@ void btsock_rfc_signaled(UNUSED_ATTR int fd, int flags, uint32_t user_id) {
if (slot->f.connected) {
// Make sure there's data pending in case the peer closed the socket.
int size = 0;
- if (!(flags & SOCK_THREAD_FD_EXCEPTION) || (ioctl(slot->fd, FIONREAD, &size) == 0 && size))
- //unlock before BTA_JvRfcommWrite to avoid deadlock on concurrnet multi rfcomm connectoins
- //concurrnet multi rfcomm connectoins
- pthread_mutex_unlock(&slot_lock);
+ if (!(flags & SOCK_THREAD_FD_EXCEPTION) || (TEMP_FAILURE_RETRY(ioctl(slot->fd, FIONREAD, &size)) == 0 && size)) {
BTA_JvRfcommWrite(slot->rfc_handle, slot->id);
+ }
} else {
LOG_ERROR("%s socket signaled for read while disconnected, slot: %d, channel: %d", __func__, slot->id, slot->scn);
need_close = true;
@@ -925,7 +923,7 @@ void btsock_rfc_signaled(UNUSED_ATTR int fd, int flags, uint32_t user_id) {
if (need_close || (flags & SOCK_THREAD_FD_EXCEPTION)) {
// Clean up if there's no data pending.
int size = 0;
- if (need_close || ioctl(slot->fd, FIONREAD, &size) != 0 || !size)
+ if (need_close || TEMP_FAILURE_RETRY(ioctl(slot->fd, FIONREAD, &size)) != 0 || !size)
cleanup_rfc_slot(slot);
}
@@ -979,7 +977,7 @@ int bta_co_rfc_data_outgoing_size(void *user_data, int *size) {
if (!slot)
goto out;
- if (ioctl(slot->fd, FIONREAD, size) == 0) {
+ if (TEMP_FAILURE_RETRY(ioctl(slot->fd, FIONREAD, size)) == 0) {
ret = true;
} else {
LOG_ERROR("%s unable to determine bytes remaining to be read on fd %d: %s", __func__, slot->fd, strerror(errno));
@@ -1000,7 +998,7 @@ int bta_co_rfc_data_outgoing(void *user_data, uint8_t *buf, uint16_t size) {
if (!slot)
goto out;
- int received = recv(slot->fd, buf, size, 0);
+ int received = TEMP_FAILURE_RETRY(recv(slot->fd, buf, size, 0));
if(received == size) {
ret = true;
} else {
diff --git a/btif/src/btif_sock_thread.c b/btif/src/btif_sock_thread.c
index 5dc0e3038..317b68a64 100644
--- a/btif/src/btif_sock_thread.c
+++ b/btif/src/btif_sock_thread.c
@@ -115,12 +115,12 @@ static pthread_mutex_t thread_slot_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
static inline void set_socket_blocking(int s, int blocking)
{
int opts;
- opts = fcntl(s, F_GETFL);
+ opts = TEMP_FAILURE_RETRY(fcntl(s, F_GETFL));
if (opts<0) APPL_TRACE_ERROR("set blocking (%s)", strerror(errno));
if(blocking)
opts &= ~O_NONBLOCK;
else opts |= O_NONBLOCK;
- if (fcntl(s, F_SETFL, opts) < 0)
+ if (TEMP_FAILURE_RETRY(fcntl(s, F_SETFL, opts)) < 0)
APPL_TRACE_ERROR("set blocking (%s)", strerror(errno));
}
@@ -162,7 +162,7 @@ static inline int accept_server_socket(int s)
{
struct sockaddr_un client_address;
socklen_t clen;
- int fd = accept(s, (struct sockaddr*)&client_address, &clen);
+ int fd = TEMP_FAILURE_RETRY(accept(s, (struct sockaddr*)&client_address, &clen));
APPL_TRACE_DEBUG("accepted fd:%d for server fd:%d", fd, s);
return fd;
}
@@ -326,7 +326,7 @@ int btsock_thread_add_fd(int h, int fd, int type, int flags, uint32_t user_id)
}
sock_cmd_t cmd = {CMD_ADD_FD, fd, type, flags, user_id};
APPL_TRACE_DEBUG("adding fd:%d, flags:0x%x", fd, flags);
- return send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0) == sizeof(cmd);
+ return TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0)) == sizeof(cmd);
}
bool btsock_thread_remove_fd_and_close(int thread_handle, int fd)
@@ -343,7 +343,7 @@ bool btsock_thread_remove_fd_and_close(int thread_handle, int fd)
}
sock_cmd_t cmd = {CMD_REMOVE_FD, fd, 0, 0, 0};
- return send(ts[thread_handle].cmd_fdw, &cmd, sizeof(cmd), 0) == sizeof(cmd);
+ return TEMP_FAILURE_RETRY(send(ts[thread_handle].cmd_fdw, &cmd, sizeof(cmd), 0)) == sizeof(cmd);
}
int btsock_thread_post_cmd(int h, int type, const unsigned char* data, int size, uint32_t user_id)
@@ -377,7 +377,7 @@ int btsock_thread_post_cmd(int h, int type, const unsigned char* data, int size,
return FALSE;
}
}
- return send(ts[h].cmd_fdw, cmd_send, size_send, 0) == size_send;
+ return TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, cmd_send, size_send, 0)) == size_send;
}
int btsock_thread_wakeup(int h)
{
@@ -392,7 +392,7 @@ int btsock_thread_wakeup(int h)
return FALSE;
}
sock_cmd_t cmd = {CMD_WAKEUP, 0, 0, 0, 0};
- return send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0) == sizeof(cmd);
+ return TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0)) == sizeof(cmd);
}
int btsock_thread_exit(int h)
{
@@ -407,7 +407,7 @@ int btsock_thread_exit(int h)
return FALSE;
}
sock_cmd_t cmd = {CMD_EXIT, 0, 0, 0, 0};
- if(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0) == sizeof(cmd))
+ if(TEMP_FAILURE_RETRY(send(ts[h].cmd_fdw, &cmd, sizeof(cmd), 0)) == sizeof(cmd))
{
pthread_join(ts[h].thread_id, 0);
pthread_mutex_lock(&thread_slot_lock);
@@ -502,7 +502,7 @@ static int process_cmd_sock(int h)
{
sock_cmd_t cmd = {-1, 0, 0, 0, 0};
int fd = ts[h].cmd_fdr;
- if(recv(fd, &cmd, sizeof(cmd), MSG_WAITALL) != sizeof(cmd))
+ if(TEMP_FAILURE_RETRY(recv(fd, &cmd, sizeof(cmd), MSG_WAITALL)) != sizeof(cmd))
{
APPL_TRACE_ERROR("recv cmd errno:%d", errno);
return FALSE;
@@ -611,7 +611,7 @@ static void *sock_poll_thread(void *arg)
for(;;)
{
prepare_poll_fds(h, pfds);
- int ret = poll(pfds, ts[h].poll_count, -1);
+ int ret = TEMP_FAILURE_RETRY(poll(pfds, ts[h].poll_count, -1));
if(ret == -1)
{
APPL_TRACE_ERROR("poll ret -1, exit the thread, errno:%d, err:%s", errno, strerror(errno));
diff --git a/btif/src/btif_sock_util.c b/btif/src/btif_sock_util.c
index baa3ed3d9..ead113f13 100644
--- a/btif/src/btif_sock_util.c
+++ b/btif/src/btif_sock_util.c
@@ -74,7 +74,7 @@ int sock_send_all(int sock_fd, const uint8_t* buf, int len)
int ret;
while(s)
{
- do ret = send(sock_fd, buf, s, 0);
+ do ret = TEMP_FAILURE_RETRY(send(sock_fd, buf, s, 0));
while(ret < 0 && errno == EINTR);
if(ret <= 0)
{
@@ -92,7 +92,7 @@ int sock_recv_all(int sock_fd, uint8_t* buf, int len)
int ret = -1;
while(r)
{
- do ret = recv(sock_fd, buf, r, MSG_WAITALL);
+ do ret = TEMP_FAILURE_RETRY(recv(sock_fd, buf, r, MSG_WAITALL));
while(ret < 0 && errno == EINTR);
if(ret <= 0)
{
@@ -140,7 +140,7 @@ int sock_send_fd(int sock_fd, const uint8_t* buf, int len, int send_fd)
msg.msg_iovlen = 1;
do {
- ret = sendmsg(sock_fd, &msg, MSG_NOSIGNAL);
+ ret = TEMP_FAILURE_RETRY(sendmsg(sock_fd, &msg, MSG_NOSIGNAL));
} while (ret < 0 && errno == EINTR);
if (ret < 0) {