diff --git a/init/reboot.cpp b/init/reboot.cpp index ffd58a38d..23a07aa64 100644 --- a/init/reboot.cpp +++ b/init/reboot.cpp @@ -678,9 +678,12 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str // Reap subcontext pids. ReapAnyOutstandingChildren(); - // 3. send volume shutdown to vold + // 3. send volume abort_fuse and volume shutdown to vold Service* vold_service = ServiceList::GetInstance().FindService("vold"); if (vold_service != nullptr && vold_service->IsRunning()) { + // Manually abort FUSE connections, since the FUSE daemon is already dead + // at this point, and unmounting it might hang. + CallVdc("volume", "abort_fuse"); CallVdc("volume", "shutdown"); vold_service->Stop(); } else { diff --git a/rootdir/init.rc b/rootdir/init.rc index 38ba137e7..2d6719468 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -177,6 +177,9 @@ on init mount binder binder /dev/binderfs stats=global chmod 0755 /dev/binderfs + # Mount fusectl + mount fusectl none /sys/fs/fuse/connections + symlink /dev/binderfs/binder /dev/binder symlink /dev/binderfs/hwbinder /dev/hwbinder symlink /dev/binderfs/vndbinder /dev/vndbinder diff --git a/rootdir/init.zygote32.rc b/rootdir/init.zygote32.rc index 9adbcba2e..e827cf557 100644 --- a/rootdir/init.zygote32.rc +++ b/rootdir/init.zygote32.rc @@ -5,6 +5,7 @@ service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-sys group root readproc reserved_disk socket zygote stream 660 root system socket usap_pool_primary stream 660 root system + onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse onrestart write /sys/power/state on onrestart restart audioserver onrestart restart cameraserver diff --git a/rootdir/init.zygote32_64.rc b/rootdir/init.zygote32_64.rc index f6149c921..fe6dcfa47 100644 --- a/rootdir/init.zygote32_64.rc +++ b/rootdir/init.zygote32_64.rc @@ -5,6 +5,7 @@ service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-s group root readproc reserved_disk socket zygote stream 660 root system socket usap_pool_primary stream 660 root system + onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse onrestart write /sys/power/state on onrestart restart audioserver onrestart restart cameraserver diff --git a/rootdir/init.zygote64.rc b/rootdir/init.zygote64.rc index 0e69b1695..adc703102 100644 --- a/rootdir/init.zygote64.rc +++ b/rootdir/init.zygote64.rc @@ -5,6 +5,7 @@ service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-s group root readproc reserved_disk socket zygote stream 660 root system socket usap_pool_primary stream 660 root system + onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse onrestart write /sys/power/state on onrestart restart audioserver onrestart restart cameraserver diff --git a/rootdir/init.zygote64_32.rc b/rootdir/init.zygote64_32.rc index 3e8016867..70297484a 100644 --- a/rootdir/init.zygote64_32.rc +++ b/rootdir/init.zygote64_32.rc @@ -5,6 +5,7 @@ service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-s group root readproc reserved_disk socket zygote stream 660 root system socket usap_pool_primary stream 660 root system + onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse onrestart write /sys/power/state on onrestart restart audioserver onrestart restart cameraserver