Automated import from //branches/donutburger/...@142801,142801
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index e232c2c..7fbb3a7 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -304,6 +304,9 @@
if (mSensorDataFd == null) {
Log.e(TAG, "mSensorDataFd == NULL, exiting");
+ synchronized (sListeners) {
+ mThread = null;
+ }
return;
}
// this thread is guaranteed to be unique
@@ -321,17 +324,16 @@
// wait for an event
final int sensor = sensors_data_poll(values, status, timestamp);
- if (sensor == -1) {
- // we lost the connection to the event stream. this happens
- // when the last listener is removed.
- Log.d(TAG, "_sensors_data_poll() failed, we bail out.");
- break;
- }
-
int accuracy = status[0];
synchronized (sListeners) {
- if (sListeners.isEmpty()) {
- // we have no more listeners, terminate the thread
+ if (sensor == -1 || sListeners.isEmpty()) {
+ if (sensor == -1) {
+ // we lost the connection to the event stream. this happens
+ // when the last listener is removed.
+ Log.d(TAG, "_sensors_data_poll() failed, we bail out.");
+ }
+
+ // we have no more listeners or polling failed, terminate the thread
sensors_data_close();
mThread = null;
break;