summaryrefslogtreecommitdiffstats
path: root/libs/gui
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2010-09-16 17:04:16 -0700
committerMathias Agopian <mathias@google.com>2010-09-16 17:33:48 -0700
commit4d3cb63b9b9177b79c575ca1b21040cc42ee7879 (patch)
treed7d00b7efd84dc9b8dcc359f038c734a216f31d9 /libs/gui
parentec33b82c42f3dd996a72b80359c87524b51ffb2a (diff)
downloadframeworks_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.cpp18
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