diff options
author | Kenny Root <kroot@google.com> | 2012-03-15 09:45:30 -0700 |
---|---|---|
committer | Kenny Root <kroot@google.com> | 2012-03-15 09:56:14 -0700 |
commit | a0db022419319d0b2933ff63e7ca6c59b3ed21df (patch) | |
tree | 0a43c8f0f5563755b3cf6778812d4390c78fe9ef /core/jni | |
parent | b001475fc58181f809316649776225e9fd8e4226 (diff) | |
download | frameworks_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.cpp | 10 |
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)", |