#define SIGNAL_BOOTING_DONE "BootingDone"
-#define SYSTEMD_DBUS_SIGNAL_STARTUP_FINISHED "StartupFinished"
+#define SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED "StartupFinished"
+#define SYSTEMD_DBUS_SIGNAL_USER_STARTUP_FINISHED "UserSessionStartupFinished"
#define SYSTEMD_DBUS_METHOD_SYSTEM_STATE "SystemState"
#define SYSTEMD_STATE_RUNNING "running"
#define SYSTEMD_STATE_DEGRADED "degraded"
{
unregister_edbus_signal_handler(SYSTEMD_DBUS_PATH,
SYSTEMD_DBUS_IFACE_MANAGER,
- SYSTEMD_DBUS_SIGNAL_STARTUP_FINISHED);
+ SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED);
+ unregister_edbus_signal_handler(SYSTEMD_DBUS_PATH,
+ SYSTEMD_DBUS_IFACE_MANAGER,
+ SYSTEMD_DBUS_SIGNAL_USER_STARTUP_FINISHED);
}
static void booting_done_received(void *data, DBusMessage *msg)
{
- static int done = 0;
+ static int system_done = 0;
+ static int user_done = 0;
+
+ if (dbus_message_is_signal(msg, SYSTEMD_DBUS_IFACE_MANAGER,
+ SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED)) {
+ if (system_done)
+ return;
+
+ system_done = booting_finished();
+ if (system_done == 0) {
+ _E("System Session is not ready yet");
+ return;
+ }
+ _I("System Session is Ready");
+ device_notify(DEVICE_NOTIFIER_BOOTING_DONE, &system_done);
+ }
- if (!dbus_message_is_signal(msg, SYSTEMD_DBUS_IFACE_MANAGER,
- SYSTEMD_DBUS_SIGNAL_STARTUP_FINISHED)) {
- _E("there is no StartupFinished signal");
- return;
+ else if (dbus_message_is_signal(msg, SYSTEMD_DBUS_IFACE_MANAGER,
+ SYSTEMD_DBUS_SIGNAL_USER_STARTUP_FINISHED)) {
+ if (user_done)
+ return;
+ user_done = 1;
+ _I("User Session is Ready");
}
- if (done)
+ if (!system_done || !user_done)
return;
- done = booting_finished();
- if (done != TRUE) {
- _E("Booting is not finished");
- return;
- }
-
remove_booting_done_handler(NULL);
_I("real booting done, unlock LCD_OFF");
NULL, NULL);
boot_complete_send_system_event();
-
- device_notify(DEVICE_NOTIFIER_BOOTING_DONE, &done);
}
void add_booting_done_handler(void *data)
{
- /* Normal booting done: System Session is loaded completely */
+ /* System Session is loaded completely */
+ register_edbus_signal_handler(SYSTEMD_DBUS_PATH,
+ SYSTEMD_DBUS_IFACE_MANAGER,
+ SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED,
+ booting_done_received);
+ /* User Session is loaded completely */
register_edbus_signal_handler(SYSTEMD_DBUS_PATH,
SYSTEMD_DBUS_IFACE_MANAGER,
- SYSTEMD_DBUS_SIGNAL_STARTUP_FINISHED,
+ SYSTEMD_DBUS_SIGNAL_USER_STARTUP_FINISHED,
booting_done_received);
}