summaryrefslogtreecommitdiffstats
path: root/core/jni
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2012-03-15 09:45:30 -0700
committerKenny Root <kroot@google.com>2012-03-15 09:56:14 -0700
commita0db022419319d0b2933ff63e7ca6c59b3ed21df (patch)
tree0a43c8f0f5563755b3cf6778812d4390c78fe9ef /core/jni
parentb001475fc58181f809316649776225e9fd8e4226 (diff)
downloadframeworks_base-a0db022419319d0b2933ff63e7ca6c59b3ed21df.zip
frameworks_base-a0db022419319d0b2933ff63e7ca6c59b3ed21df.tar.gz
frameworks_base-a0db022419319d0b2933ff63e7ca6c59b3ed21df.tar.bz2
Add support for EINTR in BT
During normal operation, it's common on a multi-core device to get EINTR. This is especially noticable during a bugreport where several services get EINTR even though it's not fatal. This change adds TEMP_FAILURE_RETRY around the system calls that can receive EINTR where a retry should happen. Change-Id: If13d24f57c587392f57961fe2caf46e2a6fa843e
Diffstat (limited to 'core/jni')
-rw-r--r--core/jni/android_bluetooth_BluetoothAudioGateway.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/core/jni/android_bluetooth_BluetoothAudioGateway.cpp b/core/jni/android_bluetooth_BluetoothAudioGateway.cpp
index 3b8fb79..294c626 100644
--- a/core/jni/android_bluetooth_BluetoothAudioGateway.cpp
+++ b/core/jni/android_bluetooth_BluetoothAudioGateway.cpp
@@ -196,7 +196,7 @@ static int do_accept(JNIEnv* env, jobject object, int ag_fd,
struct sockaddr_rc raddr;
int alen = sizeof(raddr);
- int nsk = accept(ag_fd, (struct sockaddr *) &raddr, &alen);
+ int nsk = TEMP_FAILURE_RETRY(accept(ag_fd, (struct sockaddr *) &raddr, &alen));
if (nsk < 0) {
ALOGE("Error on accept from socket fd %d: %s (%d).",
ag_fd,
@@ -331,12 +331,12 @@ static jboolean waitForHandsfreeConnectNative(JNIEnv* env, jobject object,
to.tv_sec = timeout_ms / 1000;
to.tv_usec = 1000 * (timeout_ms % 1000);
}
- n = select(MAX(nat->hf_ag_rfcomm_sock,
- nat->hs_ag_rfcomm_sock) + 1,
+ n = TEMP_FAILURE_RETRY(select(
+ MAX(nat->hf_ag_rfcomm_sock, nat->hs_ag_rfcomm_sock) + 1,
&rset,
NULL,
NULL,
- (timeout_ms < 0 ? NULL : &to));
+ (timeout_ms < 0 ? NULL : &to)));
if (timeout_ms > 0) {
jint remaining = to.tv_sec*1000 + to.tv_usec/1000;
ALOGI("Remaining time %ldms", (long)remaining);
@@ -391,7 +391,7 @@ static jboolean waitForHandsfreeConnectNative(JNIEnv* env, jobject object,
ALOGE("Neither HF nor HS listening sockets are open!");
return JNI_FALSE;
}
- n = poll(fds, cnt, timeout_ms);
+ n = TEMP_FAILURE_RETRY(poll(fds, cnt, timeout_ms));
if (n <= 0) {
if (n < 0) {
ALOGE("listening poll() on RFCOMM sockets: %s (%d)",