aboutsummaryrefslogtreecommitdiffstats
path: root/android/hw-sensors.c
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/hw-sensors.c
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/hw-sensors.c')
-rw-r--r--android/hw-sensors.c12
1 files changed, 10 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;
}