#include <glib/gstdio.h>
#include <gio/gio.h>
#include <libsyscommon/dbus-system.h>
+#include <libsyscommon/systemd-state.h>
#include "log.h"
#include "config-parser.h"
}
}
-static void booting_done(GDBusConnection *conn,
- const gchar *sender,
- const gchar *path,
- const gchar *iface,
- const gchar *name,
- GVariant *param,
- gpointer data)
+static void booting_done(void)
{
static int done = 0;
int ret;
block_boot = true;
}
+static void booting_done_received(GDBusConnection *conn,
+ const gchar *sender,
+ const gchar *path,
+ const gchar *iface,
+ const gchar *name,
+ GVariant *param,
+ gpointer data)
+{
+ _I("Signal received: %s", SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED);
+ booting_done();
+}
+
static void block_poweroff(GDBusConnection *conn,
const gchar *sender,
const gchar *path,
if (ret < 0)
_E("Failed to init pipe.");
- /* System Session is loaded completely */
- id_booting_done = subscribe_dbus_signal(NULL, SYSTEMD_DBUS_PATH,
- SYSTEMD_DBUS_IFACE_MANAGER,
- SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED,
- booting_done, NULL, NULL);
-
- id_block_poweroff = subscribe_dbus_signal(NULL, DEVICED_PATH_POWEROFF,
- DEVICED_INTERFACE_POWEROFF,
- SIGNAL_POWEROFF_STATE,
- block_poweroff, NULL, NULL);
-
for (i = 0; i < THREAD_MAX; i++) {
th_manager[i].num_dev = 0;
th_manager[i].op_len = 0;
ret = get_internal_storage_number();
if (ret < 0)
_E("Failed to get internal storage number.");
+
+ if (check_system_boot_finished() != 0) {
+ _I("System session is already loaded.");
+ id_booting_done = 0;
+ booting_done();
+ } else {
+ /* System Session is loaded completely */
+ id_booting_done = subscribe_dbus_signal(NULL, SYSTEMD_DBUS_PATH,
+ SYSTEMD_DBUS_IFACE_MANAGER,
+ SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED,
+ booting_done_received, NULL, NULL);
+ }
+
+ id_block_poweroff = subscribe_dbus_signal(NULL, DEVICED_PATH_POWEROFF,
+ DEVICED_INTERFACE_POWEROFF,
+ SIGNAL_POWEROFF_STATE,
+ block_poweroff, NULL, NULL);
}
static void terminate_threads(void)
{
#include <tzplatform_config.h>
#include <glib.h>
#include <libsyscommon/dbus-system.h>
+#include <libsyscommon/systemd-state.h>
#include "log.h"
#include "config-parser.h"
.nr_methods = ARRAY_SIZE(storage_methods),
};
-static void booting_done(GDBusConnection *conn,
- const gchar *sender,
- const gchar *path,
- const gchar *iface,
- const gchar *name,
- GVariant *param,
- gpointer data)
+static void booting_done(void)
{
static int done;
_I("Booting done.");
if (init_storage_config_info_all() == -1)
- _E("Failed remain mem noti control fd init.");
+ _E("Failed to remain mem noti control fd init.");
+}
+
+static void booting_done_received(GDBusConnection *conn,
+ const gchar *sender,
+ const gchar *path,
+ const gchar *iface,
+ const gchar *name,
+ GVariant *param,
+ gpointer data)
+{
+ _I("Signal received: %s", SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED);
+ booting_done();
}
static void storage_poweroff(GDBusConnection *conn,
storage_config_load(&storage_internal_info);
- /* System Session is loaded completely */
- id_booting_done = subscribe_dbus_signal(NULL, SYSTEMD_DBUS_PATH,
- SYSTEMD_DBUS_IFACE_MANAGER,
- SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED,
- booting_done, NULL, NULL);
-
- id_storage_poweroff = subscribe_dbus_signal(NULL, DEVICED_PATH_POWEROFF,
- DEVICED_INTERFACE_POWEROFF,
- SIGNAL_POWEROFF_STATE,
- storage_poweroff, NULL, NULL);
-
ret = dbus_handle_register_dbus_object(NULL, STORAGED_PATH_STORAGE,
&storage_interface);
if (ret < 0)
ret = mkdir(NEED_CLEANUP_DIR_PATH, 0644);
if (ret < 0)
_E("Failed to make directory: %d", errno);
+
+ if (check_system_boot_finished() != 0) {
+ _I("System session is already loaded.");
+ id_booting_done = 0;
+ booting_done();
+ } else {
+ /* System Session is loaded completely */
+ id_booting_done = subscribe_dbus_signal(NULL, SYSTEMD_DBUS_PATH,
+ SYSTEMD_DBUS_IFACE_MANAGER,
+ SYSTEMD_DBUS_SIGNAL_SYSTEM_STARTUP_FINISHED,
+ booting_done_received, NULL, NULL);
+ }
+
+ id_storage_poweroff = subscribe_dbus_signal(NULL, DEVICED_PATH_POWEROFF,
+ DEVICED_INTERFACE_POWEROFF,
+ SIGNAL_POWEROFF_STATE,
+ storage_poweroff, NULL, NULL);
}
static void storage_exit(void *data)