diff options
author | 2012-05-07 15:20:15 -0700 | |
---|---|---|
committer | 2012-05-07 18:22:16 -0700 | |
commit | 29267fe8495a74893dfce1bd9eceb6448df7abea (patch) | |
tree | 05c7ef0ae9b71eae271a8ed8882e6ef999182aee | |
parent | 3410a85b15a4d2579b5e77144f275a30ad880a65 (diff) |
return errors properly in BitTube and SensorEventQueue
Change-Id: Idf31179f9fcc666e287c7b01b2007431cb60127d
-rw-r--r-- | libs/gui/BitTube.cpp | 6 | ||||
-rw-r--r-- | libs/gui/SensorEventQueue.cpp | 11 |
2 files changed, 11 insertions, 6 deletions
diff --git a/libs/gui/BitTube.cpp b/libs/gui/BitTube.cpp index 355a319c52..cf44bb95fa 100644 --- a/libs/gui/BitTube.cpp +++ b/libs/gui/BitTube.cpp @@ -140,8 +140,7 @@ ssize_t BitTube::sendObjects(const sp<BitTube>& tube, ssize_t size = tube->write(vaddr, objSize); if (size < 0) { // error occurred - numObjects = -size; - break; + return size; } else if (size == 0) { // no more space break; @@ -160,8 +159,7 @@ ssize_t BitTube::recvObjects(const sp<BitTube>& tube, ssize_t size = tube->read(vaddr, objSize); if (size < 0) { // error occurred - numObjects = -size; - break; + return size; } else if (size == 0) { // no more messages break; diff --git a/libs/gui/SensorEventQueue.cpp b/libs/gui/SensorEventQueue.cpp index 04ba6404a0..8a1bf41826 100644 --- a/libs/gui/SensorEventQueue.cpp +++ b/libs/gui/SensorEventQueue.cpp @@ -79,14 +79,21 @@ status_t SensorEventQueue::waitForEvent() const const int fd = getFd(); sp<Looper> looper(getLooper()); + int events; int32_t result; do { - result = looper->pollOnce(-1); - if (result == ALOOPER_EVENT_ERROR) { + result = looper->pollOnce(-1, NULL, &events, NULL); + if (result == ALOOPER_POLL_ERROR) { ALOGE("SensorEventQueue::waitForEvent error (errno=%d)", errno); result = -EPIPE; // unknown error, so we make up one break; } + if (events & ALOOPER_EVENT_HANGUP) { + // the other-side has died + ALOGE("SensorEventQueue::waitForEvent error HANGUP"); + result = -EPIPE; // unknown error, so we make up one + break; + } } while (result != fd); return (result == fd) ? status_t(NO_ERROR) : result; |