From: Nitin Srivastav Date: Fri, 21 Feb 2014 13:03:14 +0000 (+0530) Subject: Bluetooth: retry recv in case of EINTR X-Git-Tag: android-x86-7.1-r1~1800 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=1b1708919d25b5b58384a590f8258f099c97a81f;p=android-x86%2Fsystem-bt.git Bluetooth: retry recv in case of EINTR - retry recv call in HAL, in case socket call fails with EINTR Change-Id: I3ab27752b0ce0a68f6776cf5da340580e7d1f345 --- diff --git a/audio_a2dp_hw/audio_a2dp_hw.c b/audio_a2dp_hw/audio_a2dp_hw.c index a3614992f..10432f1a6 100644 --- a/audio_a2dp_hw/audio_a2dp_hw.c +++ b/audio_a2dp_hw/audio_a2dp_hw.c @@ -286,9 +286,24 @@ static int a2dp_command(struct a2dp_stream_out *out, char cmd) if (recv(out->ctrl_fd, &ack, 1, MSG_NOSIGNAL) < 0) { ERROR("ack failed (%s)", strerror(errno)); - skt_disconnect(out->ctrl_fd); - out->ctrl_fd = AUDIO_SKT_DISCONNECTED; - return -1; + if (errno == EINTR) + { + /* retry again */ + if (recv(out->ctrl_fd, &ack, 1, MSG_NOSIGNAL) < 0) + { + ERROR("ack failed (%s)", strerror(errno)); + skt_disconnect(out->ctrl_fd); + out->ctrl_fd = AUDIO_SKT_DISCONNECTED; + return -1; + } + } + else + { + skt_disconnect(out->ctrl_fd); + out->ctrl_fd = AUDIO_SKT_DISCONNECTED; + return -1; + + } } DEBUG("A2DP COMMAND %s DONE STATUS %d", dump_a2dp_ctrl_event(cmd), ack);