diff options
| author | Mathias Agopian <mathias@google.com> | 2010-09-16 17:04:16 -0700 |
|---|---|---|
| committer | Mathias Agopian <mathias@google.com> | 2010-09-16 17:33:48 -0700 |
| commit | 4d3cb63b9b9177b79c575ca1b21040cc42ee7879 (patch) | |
| tree | d7d00b7efd84dc9b8dcc359f038c734a216f31d9 /libs/gui | |
| parent | ec33b82c42f3dd996a72b80359c87524b51ffb2a (diff) | |
| download | frameworks_base-4d3cb63b9b9177b79c575ca1b21040cc42ee7879.zip frameworks_base-4d3cb63b9b9177b79c575ca1b21040cc42ee7879.tar.gz frameworks_base-4d3cb63b9b9177b79c575ca1b21040cc42ee7879.tar.bz2 | |
part of fix for [3004226] Cannot end the call - Proximity sensor doesn't work
- In SensorEventQueue, only bail on errors from Looper::loopOnce
- Improve sensor error logging
Change-Id: Ib3cf8d5d9fdac8513a3d753155827e0feeda1662
Diffstat (limited to 'libs/gui')
| -rw-r--r-- | libs/gui/SensorEventQueue.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/libs/gui/SensorEventQueue.cpp b/libs/gui/SensorEventQueue.cpp index c3a9f22..b0d0f12 100644 --- a/libs/gui/SensorEventQueue.cpp +++ b/libs/gui/SensorEventQueue.cpp @@ -70,9 +70,13 @@ ssize_t SensorEventQueue::write(ASensorEvent const* events, size_t numEvents) ssize_t SensorEventQueue::read(ASensorEvent* events, size_t numEvents) { ssize_t size = mSensorChannel->read(events, numEvents*sizeof(events[0])); + LOGE_IF(size<0 && size!=-EAGAIN, + "SensorChannel::read error (%s)", strerror(-size)); if (size >= 0) { if (size % sizeof(events[0])) { // partial read!!! should never happen. + LOGE("SensorEventQueue partial read (event-size=%u, read=%d)", + sizeof(events[0]), int(size)); return -EINVAL; } // returns number of events read @@ -95,8 +99,18 @@ status_t SensorEventQueue::waitForEvent() const { const int fd = getFd(); sp<Looper> looper(getLooper()); - int32_t result = looper->pollOnce(-1); - return (result == fd) ? status_t(NO_ERROR) : status_t(-1); + + int32_t result; + do { + result = looper->pollOnce(-1); + if (result == ALOOPER_EVENT_ERROR) { + LOGE("SensorChannel::waitForEvent error (errno=%d)", errno); + result = -EPIPE; // unknown error, so we make up one + break; + } + } while (result != fd); + + return result; } status_t SensorEventQueue::wake() const |
