Fix encryption on certain devices

There is a race in the encryption code that after it accepts the
decryption password, it tells init to kill all the processes in
class "main", then it mounts the decrypted filesystem, preps it,
and restarts the framework.  For an unknown reason on some devices,
the new framework sometimes starts up before init has killed and
reaped all the old processes.  The proper fix is to make the killing
of the old framework synchronous, so vold waits till all the
processes have died.  But with factory rom a few days away, the
much more pragmatic solution of adding a sleep of 1 second after
telling init to kill the old framework will suffice.

Bug: 7271212
Change-Id: Ie971cd04abbc6f3f6500b4acd79d3b3b26d9561c
This commit is contained in:
Ken Sumrall 2012-10-09 14:16:59 -07:00
parent 7a3c3d462e
commit 9dedfd473d

View file

@ -688,6 +688,9 @@ int cryptfs_restart(void)
property_set("vold.decrypt", "trigger_reset_main"); property_set("vold.decrypt", "trigger_reset_main");
SLOGD("Just asked init to shut down class main\n"); SLOGD("Just asked init to shut down class main\n");
/* Give everything a chance to shutdown */
sleep(1);
/* Now that the framework is shutdown, we should be able to umount() /* Now that the framework is shutdown, we should be able to umount()
* the tmpfs filesystem, and mount the real one. * the tmpfs filesystem, and mount the real one.
*/ */