summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mathias Agopian <mathias@google.com> 2012-05-07 15:20:15 -0700
committer Mathias Agopian <mathias@google.com> 2012-05-07 18:22:16 -0700
commit29267fe8495a74893dfce1bd9eceb6448df7abea (patch)
tree05c7ef0ae9b71eae271a8ed8882e6ef999182aee
parent3410a85b15a4d2579b5e77144f275a30ad880a65 (diff)
return errors properly in BitTube and SensorEventQueue
Change-Id: Idf31179f9fcc666e287c7b01b2007431cb60127d
-rw-r--r--libs/gui/BitTube.cpp6
-rw-r--r--libs/gui/SensorEventQueue.cpp11
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;