diff options
author | Mathias Agopian <mathias@google.com> | 2011-10-16 22:15:23 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2011-10-16 22:15:23 -0700 |
commit | de6c44e90681cbdb754e55721953fc828ec8e2aa (patch) | |
tree | 9cd3aeef0b48317abda405f001bea32157cd8af6 /include/gui | |
parent | 4fb6416e3a21031a88921a784ae62b13d8a1a39f (diff) | |
download | frameworks_base-de6c44e90681cbdb754e55721953fc828ec8e2aa.zip frameworks_base-de6c44e90681cbdb754e55721953fc828ec8e2aa.tar.gz frameworks_base-de6c44e90681cbdb754e55721953fc828ec8e2aa.tar.bz2 |
SensorManager reconnects to sensor service when the later dies
if system process ever restarted, processes using a SensorManager
would loose the ability to use it, resulting to a crash.
we now listen for sensor service death and reconnected if necessary.
Bug: 5445240
Change-Id: Ia47f8b26cdcecb729fa22bf11d55e10fcaef8cfc
Diffstat (limited to 'include/gui')
-rw-r--r-- | include/gui/SensorManager.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/include/gui/SensorManager.h b/include/gui/SensorManager.h index e1b1a7b..3176462 100644 --- a/include/gui/SensorManager.h +++ b/include/gui/SensorManager.h @@ -20,6 +20,8 @@ #include <stdint.h> #include <sys/types.h> +#include <binder/IBinder.h> + #include <utils/Errors.h> #include <utils/RefBase.h> #include <utils/Singleton.h> @@ -41,7 +43,9 @@ class SensorEventQueue; // ---------------------------------------------------------------------------- -class SensorManager : public ASensorManager, public Singleton<SensorManager> +class SensorManager : + public ASensorManager, + public Singleton<SensorManager> { public: SensorManager(); @@ -52,9 +56,17 @@ public: sp<SensorEventQueue> createEventQueue(); private: - sp<ISensorServer> mSensorServer; - Sensor const** mSensorList; - Vector<Sensor> mSensors; + // DeathRecipient interface + void sensorManagerDied(); + + status_t assertStateLocked() const; + +private: + mutable Mutex mLock; + mutable sp<ISensorServer> mSensorServer; + mutable Sensor const** mSensorList; + mutable Vector<Sensor> mSensors; + mutable sp<IBinder::DeathRecipient> mDeathObserver; }; // ---------------------------------------------------------------------------- |