aboutsummaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@android.com>2011-02-24 16:27:48 +0100
committerDavid 'Digit' Turner <digit@android.com>2011-02-24 16:27:48 +0100
commit607461d262aaa756c2ea3a9c6eb03cff38294c70 (patch)
tree74992c9d31e6cc912ebbfa8e507f12ff5a9cb351 /android
parent02f10347d2244c192de8da96a6d6a6a66c394721 (diff)
downloadexternal_qemu-607461d262aaa756c2ea3a9c6eb03cff38294c70.zip
external_qemu-607461d262aaa756c2ea3a9c6eb03cff38294c70.tar.gz
external_qemu-607461d262aaa756c2ea3a9c6eb03cff38294c70.tar.bz2
Fix sensor-related snapshot resume failure.
A snapshot saved with the Tools r9 emulator couldn't be restored properly because we added another sensor (proximity) in Tools r10. Provide code to deal with this case properly and avoid a nasty crash. Change-Id: Ifc395c12496a599eb4ae02e089fe8e13a90865b4
Diffstat (limited to 'android')
-rw-r--r--android/hw-sensors.c12
-rw-r--r--android/hw-sensors.h3
2 files changed, 13 insertions, 2 deletions
diff --git a/android/hw-sensors.c b/android/hw-sensors.c
index e191f68..c3ab12f 100644
--- a/android/hw-sensors.c
+++ b/android/hw-sensors.c
@@ -525,7 +525,7 @@ _hwSensors_load( QEMUFile* f, QemudService* s, void* opaque)
/* check number of sensors */
int32_t num_sensors = qemu_get_be32(f);
- if (num_sensors != MAX_SENSORS) {
+ if (num_sensors > MAX_SENSORS) {
D("%s: cannot load: snapshot requires %d sensors, %d available\n",
__FUNCTION__, num_sensors, MAX_SENSORS);
return -EIO;
@@ -533,7 +533,7 @@ _hwSensors_load( QEMUFile* f, QemudService* s, void* opaque)
/* load sensor state */
AndroidSensor i;
- for (i = 0 ; i < MAX_SENSORS; i++) {
+ for (i = 0 ; i < num_sensors; i++) {
Sensor* s = &h->sensors[i];
s->enabled = qemu_get_be32(f);
@@ -567,6 +567,14 @@ _hwSensors_load( QEMUFile* f, QemudService* s, void* opaque)
}
}
+ /* The following is necessary when we resume a snaphost
+ * created by an older version of the emulator that provided
+ * less hardware sensors.
+ */
+ for ( ; i < MAX_SENSORS; i++ ) {
+ h->sensors[i].enabled = 0;
+ }
+
return 0;
}
diff --git a/android/hw-sensors.h b/android/hw-sensors.h
index 5cfc748..665cc6d 100644
--- a/android/hw-sensors.h
+++ b/android/hw-sensors.h
@@ -20,6 +20,9 @@ extern void android_hw_sensors_init( void );
/* NOTE: this list must be the same that the one defined in
* the sensors_qemu.c source of the libsensors.goldfish.so
* library.
+ *
+ * DO NOT CHANGE THE ORDER IN THIS LIST, UNLESS YOU INTEND
+ * TO BREAK SNAPSHOTS!
*/
#define SENSORS_LIST \
SENSOR_(ACCELERATION,"acceleration") \