return errors properly in BitTube and SensorEventQueue
Change-Id: Idf31179f9fcc666e287c7b01b2007431cb60127d
diff --git a/libs/gui/BitTube.cpp b/libs/gui/BitTube.cpp
index 355a319..cf44bb9 100644
--- a/libs/gui/BitTube.cpp
+++ b/libs/gui/BitTube.cpp
@@ -140,8 +140,7 @@
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 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 04ba640..8a1bf41 100644
--- a/libs/gui/SensorEventQueue.cpp
+++ b/libs/gui/SensorEventQueue.cpp
@@ -79,14 +79,21 @@
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;