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
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 @@
/* 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 @@
/* 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 @@
}
}
+ /* 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;
}