From 607461d262aaa756c2ea3a9c6eb03cff38294c70 Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Thu, 24 Feb 2011 16:27:48 +0100 Subject: 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 --- android/hw-sensors.c | 12 ++++++++++-- android/hw-sensors.h | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'android') 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") \ -- cgit v1.1