Android - Surface Flinger triggered Framework reboot

    In early versions of Android, surface flinger was hosted along with the rest of the framework services in a single process space. Consequently, any fatal failures in Surface Flinger terminates the core framework process (system_server) and from here on all services, including Surface Flinger, are restarted. However, in later versions of Android, Surface Flinger was separated into its own process space and yet termination of the same causes a framework reboot. So how is this done?

   Its because of the way services and their dependencies are setup at boot time. Init process's configuration is setup like this in init.rc,

                  service surfaceflinger /system/bin/surfaceflinger
                       class main
                       user system
                       group graphics drmrpc
                       onrestart restart zygote

   init process receives a signal (SIGCHLD) anytime surface flinger is terminated or killed. The corresponding handler basically restarts zygote and this causes the framework reboot.

No comments: