Allocate DBus related memory dynamically 68/194768/2
authorYu <jiung.yu@samsung.com>
Fri, 7 Dec 2018 06:45:06 +0000 (15:45 +0900)
committerYu <jiung.yu@samsung.com>
Fri, 7 Dec 2018 06:55:04 +0000 (15:55 +0900)
Change-Id: Ic86d3f037b1830f0dc0ad2eba41c1bfc6d7fc5e2
Signed-off-by: Yu Jiung <jiung.yu@samsung.com>
src/inm-gdbus.c

index 50c5de56a3fce2d5ad1068d8676315ca2c80f724..88f13abbace9f6b2b8ea71e103a682fe7ebc949a 100644 (file)
@@ -99,7 +99,6 @@ typedef struct {
        bus_aquired_callback bus_acquired_cb;
        name_lost_callback name_lost_cb;
 
-       gboolean is_initialized;
        gboolean is_bus_aquired;
        guint owner_id;
 
@@ -282,7 +281,7 @@ static const gchar inm_conn_introspection_xml[] = {
        "</node>"
 };
 
-gdbus_mon_s gdbus_mon;
+static gdbus_mon_s *g_p_gdbus_mon = NULL;
 
 //LCOV_EXCL_START
 static void inm_error_invalid_parameter(GError **error)
@@ -397,7 +396,10 @@ void inm_error_deregister(void)
 
 GDBusConnection *inm_gdbus_get_connection(void)
 {
-       return gdbus_mon.conn;
+       if (!g_p_gdbus_mon)
+               return NULL;
+
+       return g_p_gdbus_mon->conn;
 }
 
 gboolean inm_gdbus_emit_signal(const gchar *destination_bus_name,
@@ -452,7 +454,7 @@ int inm_gdbus_method_call(method_param_s *params,
        GVariant *reply = NULL;
        GError *error = NULL;
 
-       if (!gdbus_mon.is_initialized)
+       if (!g_p_gdbus_mon)
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
 
        if (!params || !params->bus_name || !params->object_path)
@@ -461,7 +463,7 @@ int inm_gdbus_method_call(method_param_s *params,
        PRINT_LOG("<GDbus method:%s>", params->method_name);
 
        reply = g_dbus_connection_call_sync(
-                       gdbus_mon.conn,
+                       g_p_gdbus_mon->conn,
                        params->bus_name, /* bus name */
                        params->object_path, /* object path */
                        params->interface_name, /* interface name */
@@ -499,7 +501,7 @@ int inm_gdbus_subscribe_signal(signal_param_s *param)
        gint ret = INM_GDBUS_ERROR_NONE;
 
 
-       if (!gdbus_mon.is_initialized)
+       if (!g_p_gdbus_mon)
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
 
        if (!param || !param->sender || !param->interface_name)
@@ -507,7 +509,7 @@ int inm_gdbus_subscribe_signal(signal_param_s *param)
 
        param->subscriber_id =
                        g_dbus_connection_signal_subscribe(
-                                       gdbus_mon.conn,
+                                       g_p_gdbus_mon->conn,
                                        param->sender,
                                        param->interface_name,
                                        param->member,
@@ -531,7 +533,7 @@ int inm_gdbus_subscribe_signal_with_data(signal_param_s *param, gpointer user_da
 
        __INM_FUNC_ENTER__;
 
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
@@ -543,7 +545,7 @@ int inm_gdbus_subscribe_signal_with_data(signal_param_s *param, gpointer user_da
 
        param->subscriber_id =
                        g_dbus_connection_signal_subscribe(
-                                       gdbus_mon.conn,
+                                       g_p_gdbus_mon->conn,
                                        param->sender,
                                        param->interface_name,
                                        param->member,
@@ -570,7 +572,7 @@ int inm_gdbus_unsubscribe_signal(signal_param_s *param)
 
        __INM_FUNC_ENTER__;
 
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
@@ -581,7 +583,7 @@ int inm_gdbus_unsubscribe_signal(signal_param_s *param)
        }
 
        g_dbus_connection_signal_unsubscribe(
-                       gdbus_mon.conn,
+                       g_p_gdbus_mon->conn,
                        param->subscriber_id
                        );
 
@@ -817,7 +819,7 @@ static inline void __handle_set_tcpdump_state(GVariant *parameters,
                        "TcpdumpState",
                        g_variant_new_boolean(tcpdump_state));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1263,7 +1265,7 @@ void inm_gdbus_emit_ip_conflicted(int state, gchar *if_name, gchar *ip)
        GVariantBuilder *sub_builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1280,7 +1282,7 @@ void inm_gdbus_emit_ip_conflicted(int state, gchar *if_name, gchar *ip)
                        "ConflictInfo",
                        g_variant_builder_end(sub_builder));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1306,7 +1308,7 @@ void inm_gdbus_emit_arping_result(gboolean found, gchar *ip)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1316,7 +1318,7 @@ void inm_gdbus_emit_arping_result(gboolean found, gchar *ip)
        g_variant_builder_add(builder, "{sv}", "Found", g_variant_new_boolean(found));
        g_variant_builder_add(builder, "{sv}", "TargetIp", g_variant_new_string(ip));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1340,7 +1342,7 @@ void inm_gdbus_emit_gateway_check_result(gboolean found, gchar *ip)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1350,7 +1352,7 @@ void inm_gdbus_emit_gateway_check_result(gboolean found, gchar *ip)
        g_variant_builder_add(builder, "{sv}", "Found", g_variant_new_boolean(found));
        g_variant_builder_add(builder, "{sv}", "GatewayIp", g_variant_new_string(ip));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1374,7 +1376,7 @@ void inm_gdbus_emit_reacher_result(gboolean found, const gchar *url)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1384,7 +1386,7 @@ void inm_gdbus_emit_reacher_result(gboolean found, const gchar *url)
        g_variant_builder_add(builder, "{sv}", "Found", g_variant_new_boolean(found));
        g_variant_builder_add(builder, "{sv}", "Url", g_variant_new_string(url));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1408,7 +1410,7 @@ void inm_gdbus_emit_ethernet_cable_state(gboolean state)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1420,7 +1422,7 @@ void inm_gdbus_emit_ethernet_cable_state(gboolean state)
                              "EthernetCableState",
                                  g_variant_new_boolean(state));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1447,7 +1449,7 @@ void inm_gdbus_emit_wifi_module_state(gboolean state)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1459,7 +1461,7 @@ void inm_gdbus_emit_wifi_module_state(gboolean state)
                              "WifiModuleState",
                                  g_variant_new_boolean(state));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1486,7 +1488,7 @@ void inm_gdbus_emit_retry_tx_rate_changed(int retry_tx_rate)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1498,7 +1500,7 @@ void inm_gdbus_emit_retry_tx_rate_changed(int retry_tx_rate)
                              "RetryTxRate",
                                  g_variant_new_int32(retry_tx_rate));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1526,7 +1528,7 @@ void inm_gdbus_emit_channel_interference(int freq, double channel_intf)
        GVariantBuilder *sub_builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1543,7 +1545,7 @@ void inm_gdbus_emit_channel_interference(int freq, double channel_intf)
                              "ChannelInterference",
                                g_variant_builder_end(sub_builder));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1572,7 +1574,7 @@ void inm_gdbus_emit_congestion_level_changed(int congestion_level)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1584,7 +1586,7 @@ void inm_gdbus_emit_congestion_level_changed(int congestion_level)
                              "CongestionLevel",
                                  g_variant_new_int32(congestion_level));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1611,7 +1613,7 @@ void inm_gdbus_emit_cellular_state(int state)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1623,7 +1625,7 @@ void inm_gdbus_emit_cellular_state(int state)
                              "CellularState",
                                  g_variant_new_int32(state));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1650,7 +1652,7 @@ void inm_gdbus_emit_wifi_state(int state)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1662,7 +1664,7 @@ void inm_gdbus_emit_wifi_state(int state)
                              "WifiState",
                                  g_variant_new_int32(state));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1689,7 +1691,7 @@ void inm_gdbus_emit_ethernet_state(int state)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1701,7 +1703,7 @@ void inm_gdbus_emit_ethernet_state(int state)
                              "EthernetState",
                                  g_variant_new_int32(state));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1727,13 +1729,13 @@ void inm_gdbus_emit_connections_changed(GVariant *signal_args)
        GError *error = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
        }
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_MANAGER_OBJ,
                        INM_MANAGER_SERVICE,
@@ -1758,7 +1760,7 @@ static inline void __emit_conn_signal(const gchar *property,
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1770,7 +1772,7 @@ static inline void __emit_conn_signal(const gchar *property,
                                  property,
                                  signal_args);
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        path,
                        INM_CONN_IFACE,
@@ -1818,7 +1820,7 @@ void inm_gdbus_emit_wifi_scanning_changed(gboolean scanning)
        GVariantBuilder *builder = NULL;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_bus_aquired) {
+       if (g_p_gdbus_mon && !g_p_gdbus_mon->is_bus_aquired) {
                INM_LOGW("DBus is not acquired yet");
                __INM_FUNC_EXIT__;
                return;
@@ -1830,7 +1832,7 @@ void inm_gdbus_emit_wifi_scanning_changed(gboolean scanning)
                              "ScanState",
                                  g_variant_new_boolean(scanning));
 
-       g_dbus_connection_emit_signal(gdbus_mon.conn,
+       g_dbus_connection_emit_signal(g_p_gdbus_mon->conn,
                        NULL,
                        INM_WIFI_OBJ,
                        INM_WIFI_IFACE,
@@ -2009,9 +2011,9 @@ int inm_gdbus_register_conn_iface(gchar *conn_obj, guint *conn_obj_id, gpointer
        GError *error = NULL;
        guint obj_id = 0;
 
-       obj_id = g_dbus_connection_register_object(gdbus_mon.conn,
+       obj_id = g_dbus_connection_register_object(g_p_gdbus_mon->conn,
                                                   conn_obj,
-                                                  gdbus_mon.conn_introspection->interfaces[0],
+                                                  g_p_gdbus_mon->conn_introspection->interfaces[0],
                                                   &inm_conn_iface_vtbl,
                                                   conn,
                                                   NULL,
@@ -2036,7 +2038,7 @@ int inm_gdbus_register_conn_iface(gchar *conn_obj, guint *conn_obj_id, gpointer
 
 void inm_gdbus_deregister_conn_iface(guint inm_conn_obj_id)
 {
-       g_dbus_connection_unregister_object(gdbus_mon.conn, inm_conn_obj_id);
+       g_dbus_connection_unregister_object(g_p_gdbus_mon->conn, inm_conn_obj_id);
 }
 
 int inm_gdbus_register_daemon_iface(void)
@@ -2045,15 +2047,15 @@ int inm_gdbus_register_daemon_iface(void)
 
        __INM_FUNC_ENTER__;
 
-       gdbus_mon.daemon_obj_id = g_dbus_connection_register_object(
-                       gdbus_mon.conn,
+       g_p_gdbus_mon->daemon_obj_id = g_dbus_connection_register_object(
+                       g_p_gdbus_mon->conn,
                        INM_MANAGER_OBJ,
-                       gdbus_mon.daemon_introspection->interfaces[0],
+                       g_p_gdbus_mon->daemon_introspection->interfaces[0],
                        &__daemon_iface_vtbl,
                        NULL,
                        NULL,
                        &error);
-       if (gdbus_mon.daemon_obj_id == 0) {
+       if (g_p_gdbus_mon->daemon_obj_id == 0) {
                INM_LOGI("register object failed!");
                __INM_FUNC_EXIT__;
                return -1;
@@ -2077,16 +2079,16 @@ int inm_gdbus_register_wifi_iface()
        GError *error = NULL;
        __INM_FUNC_ENTER__;
 
-       gdbus_mon.wifi_obj_id = g_dbus_connection_register_object(
-                       gdbus_mon.conn,
+       g_p_gdbus_mon->wifi_obj_id = g_dbus_connection_register_object(
+                       g_p_gdbus_mon->conn,
                        INM_WIFI_OBJ,
-                       gdbus_mon.wifi_introspection->interfaces[0],
+                       g_p_gdbus_mon->wifi_introspection->interfaces[0],
                        &__wifi_iface_vtbl,
                        NULL,
                        NULL,
                        &error);
 
-       if (gdbus_mon.wifi_obj_id == 0) {
+       if (g_p_gdbus_mon->wifi_obj_id == 0) {
                INM_LOGI("register object failed!");
                __INM_FUNC_EXIT__;
                return -1;
@@ -2112,14 +2114,14 @@ int inm_gdbus_ping(gchar *bus_name, gchar *object_name)
        int ret = 0;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized)
+       if (!g_p_gdbus_mon)
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
 
        if (!bus_name || !object_name)
                return INM_GDBUS_ERROR_INVALID_PARAM;
 
        reply = g_dbus_connection_call_sync(
-                       gdbus_mon.conn,
+                       g_p_gdbus_mon->conn,
                        bus_name, /* bus name */
                        object_name, /* object path */
                        DBUS_STD_PEER_IFACE, /* interface name */
@@ -2251,23 +2253,23 @@ static void __gdbus_name_appeared_cb(GDBusConnection *connection,
        PRINT_LOG("<GDBus name appeared:%s>", name);
 
        if (g_strcmp0(name, WPASUPPLICANT_BUS_NAME) == 0) {
-               if (gdbus_mon.wpasupplicant_watching_cb)
-                       gdbus_mon.wpasupplicant_watching_cb(TRUE);
+               if (g_p_gdbus_mon->wpasupplicant_watching_cb)
+                       g_p_gdbus_mon->wpasupplicant_watching_cb(TRUE);
        } else if (g_strcmp0(name, CONNMAN_BUS_NAME) == 0) {
-               if (gdbus_mon.connman_watching_cb)
-                       gdbus_mon.connman_watching_cb(TRUE);
+               if (g_p_gdbus_mon->connman_watching_cb)
+                       g_p_gdbus_mon->connman_watching_cb(TRUE);
        } else if (g_strcmp0(name, TELEPHONY_BUS_NAME) == 0) {
-               if (gdbus_mon.telephony_watching_cb)
-                       gdbus_mon.telephony_watching_cb(TRUE);
+               if (g_p_gdbus_mon->telephony_watching_cb)
+                       g_p_gdbus_mon->telephony_watching_cb(TRUE);
        } else if (g_strcmp0(name, WFD_MANAGER_BUS_NAME) == 0) {
-               if (gdbus_mon.wfd_manager_watching_cb)
-                       gdbus_mon.wfd_manager_watching_cb(TRUE);
+               if (g_p_gdbus_mon->wfd_manager_watching_cb)
+                       g_p_gdbus_mon->wfd_manager_watching_cb(TRUE);
        } else if (g_strcmp0(name, MOBILEAP_BUS_NAME) == 0) {
-               if (gdbus_mon.mobileap_watching_cb)
-                       gdbus_mon.mobileap_watching_cb(TRUE);
+               if (g_p_gdbus_mon->mobileap_watching_cb)
+                       g_p_gdbus_mon->mobileap_watching_cb(TRUE);
        } else if (g_strcmp0(name, STC_MANAGER_BUS_NAME) == 0) {
-               if (gdbus_mon.stc_manager_watching_cb)
-                       gdbus_mon.stc_manager_watching_cb(TRUE);
+               if (g_p_gdbus_mon->stc_manager_watching_cb)
+                       g_p_gdbus_mon->stc_manager_watching_cb(TRUE);
        }
 }
 
@@ -2278,23 +2280,23 @@ static void __gdbus_name_vanished_cb(GDBusConnection *connection,
        INM_LOGI("GDBus name vanished:%s>", name);
 
        if (g_strcmp0(name, WPASUPPLICANT_BUS_NAME) == 0) {
-               if (gdbus_mon.wpasupplicant_watching_cb)
-                       gdbus_mon.wpasupplicant_watching_cb(FALSE);
+               if (g_p_gdbus_mon->wpasupplicant_watching_cb)
+                       g_p_gdbus_mon->wpasupplicant_watching_cb(FALSE);
        } else if (g_strcmp0(name, CONNMAN_BUS_NAME) == 0) {
-               if (gdbus_mon.connman_watching_cb)
-                       gdbus_mon.connman_watching_cb(FALSE);
+               if (g_p_gdbus_mon->connman_watching_cb)
+                       g_p_gdbus_mon->connman_watching_cb(FALSE);
        } else if (g_strcmp0(name, TELEPHONY_BUS_NAME) == 0) {
-               if (gdbus_mon.telephony_watching_cb)
-                       gdbus_mon.telephony_watching_cb(FALSE);
+               if (g_p_gdbus_mon->telephony_watching_cb)
+                       g_p_gdbus_mon->telephony_watching_cb(FALSE);
        } else if (g_strcmp0(name, WFD_MANAGER_BUS_NAME) == 0) {
-               if (gdbus_mon.wfd_manager_watching_cb)
-                       gdbus_mon.wfd_manager_watching_cb(FALSE);
+               if (g_p_gdbus_mon->wfd_manager_watching_cb)
+                       g_p_gdbus_mon->wfd_manager_watching_cb(FALSE);
        } else if (g_strcmp0(name, MOBILEAP_BUS_NAME) == 0) {
-               if (gdbus_mon.mobileap_watching_cb)
-                       gdbus_mon.mobileap_watching_cb(FALSE);
+               if (g_p_gdbus_mon->mobileap_watching_cb)
+                       g_p_gdbus_mon->mobileap_watching_cb(FALSE);
        } else if (g_strcmp0(name, STC_MANAGER_BUS_NAME) == 0) {
-               if (gdbus_mon.stc_manager_watching_cb)
-                       gdbus_mon.stc_manager_watching_cb(FALSE);
+               if (g_p_gdbus_mon->stc_manager_watching_cb)
+                       g_p_gdbus_mon->stc_manager_watching_cb(FALSE);
        }
 }
 
@@ -2303,29 +2305,29 @@ int inm_gdbus_set_wpasupplicant_bus_watching_callback(inm_gdbus_watching_bus_cal
        int ret = 0;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.wpasupplicant_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.wpasupplicant_watching_id);
-               gdbus_mon.wpasupplicant_watching_cb = NULL;
-               gdbus_mon.wpasupplicant_watching_id = 0;
+       if (g_p_gdbus_mon->wpasupplicant_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->wpasupplicant_watching_id);
+               g_p_gdbus_mon->wpasupplicant_watching_cb = NULL;
+               g_p_gdbus_mon->wpasupplicant_watching_id = 0;
        }
 
-       gdbus_mon.wpasupplicant_watching_id =
-                       g_bus_watch_name_on_connection(gdbus_mon.conn,
+       g_p_gdbus_mon->wpasupplicant_watching_id =
+                       g_bus_watch_name_on_connection(g_p_gdbus_mon->conn,
                                        WPASUPPLICANT_BUS_NAME,
                                        G_BUS_NAME_WATCHER_FLAGS_NONE,
                                        __gdbus_name_appeared_cb,
                                        __gdbus_name_vanished_cb,
                                        NULL,
                                        NULL);
-       if (gdbus_mon.wpasupplicant_watching_id == 0)
+       if (g_p_gdbus_mon->wpasupplicant_watching_id == 0)
                ret = INM_GDBUS_ERROR_OPERATION_FAILED;
        else
-               gdbus_mon.wpasupplicant_watching_cb = cb;
+               g_p_gdbus_mon->wpasupplicant_watching_cb = cb;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -2334,15 +2336,15 @@ int inm_gdbus_set_wpasupplicant_bus_watching_callback(inm_gdbus_watching_bus_cal
 int inm_gdbus_unset_wpasupplicant_bus_watching_callback()
 {
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.wpasupplicant_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.wpasupplicant_watching_id);
-               gdbus_mon.wpasupplicant_watching_cb = NULL;
-               gdbus_mon.wpasupplicant_watching_id = 0;
+       if (g_p_gdbus_mon->wpasupplicant_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->wpasupplicant_watching_id);
+               g_p_gdbus_mon->wpasupplicant_watching_cb = NULL;
+               g_p_gdbus_mon->wpasupplicant_watching_id = 0;
        }
 
        __INM_FUNC_EXIT__;
@@ -2354,29 +2356,29 @@ int inm_gdbus_set_connman_bus_watching_callback(inm_gdbus_watching_bus_callback
        int ret = 0;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.connman_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.connman_watching_id);
-               gdbus_mon.connman_watching_cb = NULL;
-               gdbus_mon.connman_watching_id = 0;
+       if (g_p_gdbus_mon->connman_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->connman_watching_id);
+               g_p_gdbus_mon->connman_watching_cb = NULL;
+               g_p_gdbus_mon->connman_watching_id = 0;
        }
 
-       gdbus_mon.connman_watching_id =
-                       g_bus_watch_name_on_connection(gdbus_mon.conn,
+       g_p_gdbus_mon->connman_watching_id =
+                       g_bus_watch_name_on_connection(g_p_gdbus_mon->conn,
                                        CONNMAN_BUS_NAME,
                                        G_BUS_NAME_WATCHER_FLAGS_NONE,
                                        __gdbus_name_appeared_cb,
                                        __gdbus_name_vanished_cb,
                                        NULL,
                                        NULL);
-       if (gdbus_mon.connman_watching_id == 0)
+       if (g_p_gdbus_mon->connman_watching_id == 0)
                ret = INM_GDBUS_ERROR_OPERATION_FAILED;
        else
-               gdbus_mon.connman_watching_cb = cb;
+               g_p_gdbus_mon->connman_watching_cb = cb;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -2385,15 +2387,15 @@ int inm_gdbus_set_connman_bus_watching_callback(inm_gdbus_watching_bus_callback
 int inm_gdbus_unset_connman_bus_watching_callback()
 {
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.connman_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.connman_watching_id);
-               gdbus_mon.connman_watching_cb = NULL;
-               gdbus_mon.connman_watching_id = 0;
+       if (g_p_gdbus_mon->connman_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->connman_watching_id);
+               g_p_gdbus_mon->connman_watching_cb = NULL;
+               g_p_gdbus_mon->connman_watching_id = 0;
        }
 
        __INM_FUNC_EXIT__;
@@ -2405,29 +2407,29 @@ int inm_gdbus_set_telephony_bus_watching_callback(inm_gdbus_watching_bus_callbac
        int ret = 0;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.telephony_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.telephony_watching_id);
-               gdbus_mon.telephony_watching_cb = NULL;
-               gdbus_mon.telephony_watching_id = 0;
+       if (g_p_gdbus_mon->telephony_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->telephony_watching_id);
+               g_p_gdbus_mon->telephony_watching_cb = NULL;
+               g_p_gdbus_mon->telephony_watching_id = 0;
        }
 
-       gdbus_mon.telephony_watching_id =
-                       g_bus_watch_name_on_connection(gdbus_mon.conn,
+       g_p_gdbus_mon->telephony_watching_id =
+                       g_bus_watch_name_on_connection(g_p_gdbus_mon->conn,
                                        TELEPHONY_BUS_NAME,
                                        G_BUS_NAME_WATCHER_FLAGS_NONE,
                                        __gdbus_name_appeared_cb,
                                        __gdbus_name_vanished_cb,
                                        NULL,
                                        NULL);
-       if (gdbus_mon.telephony_watching_id == 0)
+       if (g_p_gdbus_mon->telephony_watching_id == 0)
                ret = INM_GDBUS_ERROR_OPERATION_FAILED;
        else
-               gdbus_mon.telephony_watching_cb = cb;
+               g_p_gdbus_mon->telephony_watching_cb = cb;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -2436,15 +2438,15 @@ int inm_gdbus_set_telephony_bus_watching_callback(inm_gdbus_watching_bus_callbac
 int inm_gdbus_unset_telephony_bus_watching_callback()
 {
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.telephony_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.telephony_watching_id);
-               gdbus_mon.telephony_watching_cb = NULL;
-               gdbus_mon.telephony_watching_id = 0;
+       if (g_p_gdbus_mon->telephony_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->telephony_watching_id);
+               g_p_gdbus_mon->telephony_watching_cb = NULL;
+               g_p_gdbus_mon->telephony_watching_id = 0;
        }
 
        __INM_FUNC_EXIT__;
@@ -2456,29 +2458,29 @@ int inm_gdbus_set_wfd_manager_bus_watching_callback(inm_gdbus_watching_bus_callb
        int ret = 0;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.wfd_manager_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.wfd_manager_watching_id);
-               gdbus_mon.wfd_manager_watching_cb = NULL;
-               gdbus_mon.wfd_manager_watching_id  = 0;
+       if (g_p_gdbus_mon->wfd_manager_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->wfd_manager_watching_id);
+               g_p_gdbus_mon->wfd_manager_watching_cb = NULL;
+               g_p_gdbus_mon->wfd_manager_watching_id  = 0;
        }
 
-       gdbus_mon.wfd_manager_watching_id =
-                       g_bus_watch_name_on_connection(gdbus_mon.conn,
+       g_p_gdbus_mon->wfd_manager_watching_id =
+                       g_bus_watch_name_on_connection(g_p_gdbus_mon->conn,
                                        WFD_MANAGER_BUS_NAME,
                                        G_BUS_NAME_WATCHER_FLAGS_NONE,
                                        __gdbus_name_appeared_cb,
                                        __gdbus_name_vanished_cb,
                                        NULL,
                                        NULL);
-       if (gdbus_mon.wfd_manager_watching_id == 0)
+       if (g_p_gdbus_mon->wfd_manager_watching_id == 0)
                ret = INM_GDBUS_ERROR_OPERATION_FAILED;
        else
-               gdbus_mon.wfd_manager_watching_cb = cb;
+               g_p_gdbus_mon->wfd_manager_watching_cb = cb;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -2487,15 +2489,15 @@ int inm_gdbus_set_wfd_manager_bus_watching_callback(inm_gdbus_watching_bus_callb
 int inm_gdbus_unset_wfd_manager_bus_watching_callback()
 {
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.wfd_manager_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.wfd_manager_watching_id);
-               gdbus_mon.wfd_manager_watching_cb = NULL;
-               gdbus_mon.wfd_manager_watching_id  = 0;
+       if (g_p_gdbus_mon->wfd_manager_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->wfd_manager_watching_id);
+               g_p_gdbus_mon->wfd_manager_watching_cb = NULL;
+               g_p_gdbus_mon->wfd_manager_watching_id  = 0;
        }
 
        __INM_FUNC_EXIT__;
@@ -2507,29 +2509,29 @@ int inm_gdbus_set_mobileap_bus_watching_callback(inm_gdbus_watching_bus_callback
        int ret = 0;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.mobileap_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.mobileap_watching_id);
-               gdbus_mon.mobileap_watching_cb = NULL;
-               gdbus_mon.mobileap_watching_id = 0;
+       if (g_p_gdbus_mon->mobileap_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->mobileap_watching_id);
+               g_p_gdbus_mon->mobileap_watching_cb = NULL;
+               g_p_gdbus_mon->mobileap_watching_id = 0;
        }
 
-       gdbus_mon.mobileap_watching_id =
-                       g_bus_watch_name_on_connection(gdbus_mon.conn,
+       g_p_gdbus_mon->mobileap_watching_id =
+                       g_bus_watch_name_on_connection(g_p_gdbus_mon->conn,
                                        MOBILEAP_BUS_NAME,
                                        G_BUS_NAME_WATCHER_FLAGS_NONE,
                                        __gdbus_name_appeared_cb,
                                        __gdbus_name_vanished_cb,
                                        NULL,
                                        NULL);
-       if (gdbus_mon.mobileap_watching_id == 0)
+       if (g_p_gdbus_mon->mobileap_watching_id == 0)
                ret = INM_GDBUS_ERROR_OPERATION_FAILED;
        else
-               gdbus_mon.mobileap_watching_cb = cb;
+               g_p_gdbus_mon->mobileap_watching_cb = cb;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -2538,15 +2540,15 @@ int inm_gdbus_set_mobileap_bus_watching_callback(inm_gdbus_watching_bus_callback
 int inm_gdbus_unset_mobileap_bus_watching_callback()
 {
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.mobileap_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.mobileap_watching_id);
-               gdbus_mon.mobileap_watching_cb = NULL;
-               gdbus_mon.mobileap_watching_id = 0;
+       if (g_p_gdbus_mon->mobileap_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->mobileap_watching_id);
+               g_p_gdbus_mon->mobileap_watching_cb = NULL;
+               g_p_gdbus_mon->mobileap_watching_id = 0;
        }
 
        __INM_FUNC_EXIT__;
@@ -2558,29 +2560,29 @@ int inm_gdbus_set_stc_manager_bus_watching_callback(inm_gdbus_watching_bus_callb
        int ret = 0;
 
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.stc_manager_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.stc_manager_watching_id);
-               gdbus_mon.stc_manager_watching_cb = NULL;
-               gdbus_mon.stc_manager_watching_id = 0;
+       if (g_p_gdbus_mon->stc_manager_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->stc_manager_watching_id);
+               g_p_gdbus_mon->stc_manager_watching_cb = NULL;
+               g_p_gdbus_mon->stc_manager_watching_id = 0;
        }
 
-       gdbus_mon.stc_manager_watching_id =
-                       g_bus_watch_name_on_connection(gdbus_mon.conn,
+       g_p_gdbus_mon->stc_manager_watching_id =
+                       g_bus_watch_name_on_connection(g_p_gdbus_mon->conn,
                                        STC_MANAGER_BUS_NAME,
                                        G_BUS_NAME_WATCHER_FLAGS_NONE,
                                        __gdbus_name_appeared_cb,
                                        __gdbus_name_vanished_cb,
                                        NULL,
                                        NULL);
-       if (gdbus_mon.stc_manager_watching_id == 0)
+       if (g_p_gdbus_mon->stc_manager_watching_id == 0)
                ret = INM_GDBUS_ERROR_OPERATION_FAILED;
        else
-               gdbus_mon.stc_manager_watching_cb = cb;
+               g_p_gdbus_mon->stc_manager_watching_cb = cb;
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -2589,15 +2591,15 @@ int inm_gdbus_set_stc_manager_bus_watching_callback(inm_gdbus_watching_bus_callb
 int inm_gdbus_unset_stc_manager_bus_watching_callback()
 {
        __INM_FUNC_ENTER__;
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.stc_manager_watching_id != 0) {
-               g_bus_unwatch_name(gdbus_mon.stc_manager_watching_id);
-               gdbus_mon.stc_manager_watching_cb = NULL;
-               gdbus_mon.stc_manager_watching_id = 0;
+       if (g_p_gdbus_mon->stc_manager_watching_id != 0) {
+               g_bus_unwatch_name(g_p_gdbus_mon->stc_manager_watching_id);
+               g_p_gdbus_mon->stc_manager_watching_cb = NULL;
+               g_p_gdbus_mon->stc_manager_watching_id = 0;
        }
 
        __INM_FUNC_EXIT__;
@@ -2610,10 +2612,13 @@ static void __on_bus_acquired(GDBusConnection *connection,
 {
        __INM_FUNC_ENTER__;
 
-       gdbus_mon.is_bus_aquired = TRUE;
+       if (!g_p_gdbus_mon)
+               return;
+
+       g_p_gdbus_mon->is_bus_aquired = TRUE;
 
-       if (gdbus_mon.bus_acquired_cb)
-               gdbus_mon.bus_acquired_cb();
+       if (g_p_gdbus_mon->bus_acquired_cb)
+               g_p_gdbus_mon->bus_acquired_cb();
        __INM_FUNC_EXIT__;
 }
 
@@ -2628,48 +2633,54 @@ static void __on_name_lost(GDBusConnection *connection,
                const gchar *name,
                gpointer user_data)
 {
-       gdbus_mon.is_bus_aquired = FALSE;
+       if (!g_p_gdbus_mon)
+               return;
+
+       g_p_gdbus_mon->is_bus_aquired = FALSE;
 
        INM_LOGI("Bus name lost");
-       if (gdbus_mon.name_lost_cb)
-               gdbus_mon.name_lost_cb();
+       if (g_p_gdbus_mon->name_lost_cb)
+               g_p_gdbus_mon->name_lost_cb();
 }
 
 int __init_introspection()
 {
-       gdbus_mon.daemon_introspection =
+       if (!g_p_gdbus_mon)
+               return - 1;
+
+       g_p_gdbus_mon->daemon_introspection =
                        g_dbus_node_info_new_for_xml(inm_manager_introspection_xml, NULL);
 
-       if (!gdbus_mon.daemon_introspection) {
+       if (!g_p_gdbus_mon->daemon_introspection) {
                INM_LOGE("No daemon introspection\n");
                return -1;
        }
 
-       gdbus_mon.wifi_introspection =
+       g_p_gdbus_mon->wifi_introspection =
                        g_dbus_node_info_new_for_xml(inm_wifi_introspection_xml, NULL);
 
-       if (!gdbus_mon.wifi_introspection) {
+       if (!g_p_gdbus_mon->wifi_introspection) {
                INM_LOGE("No wifi introspection\n");
-               if (gdbus_mon.daemon_introspection) {
-                       g_dbus_node_info_unref(gdbus_mon.daemon_introspection);
-                       gdbus_mon.daemon_introspection = NULL;
+               if (g_p_gdbus_mon->daemon_introspection) {
+                       g_dbus_node_info_unref(g_p_gdbus_mon->daemon_introspection);
+                       g_p_gdbus_mon->daemon_introspection = NULL;
                }
                return -1;
        }
 
-       gdbus_mon.conn_introspection =
+       g_p_gdbus_mon->conn_introspection =
                        g_dbus_node_info_new_for_xml(inm_conn_introspection_xml, NULL);
 
-       if (!gdbus_mon.wifi_introspection) {
+       if (!g_p_gdbus_mon->conn_introspection) {
                INM_LOGE("No conn introspection\n");
-               if (gdbus_mon.daemon_introspection) {
-                       g_dbus_node_info_unref(gdbus_mon.daemon_introspection);
-                       gdbus_mon.daemon_introspection = NULL;
+               if (g_p_gdbus_mon->daemon_introspection) {
+                       g_dbus_node_info_unref(g_p_gdbus_mon->daemon_introspection);
+                       g_p_gdbus_mon->daemon_introspection = NULL;
                }
 
-               if (gdbus_mon.wifi_introspection) {
-                       g_dbus_node_info_unref(gdbus_mon.wifi_introspection);
-                       gdbus_mon.wifi_introspection = NULL;
+               if (g_p_gdbus_mon->wifi_introspection) {
+                       g_dbus_node_info_unref(g_p_gdbus_mon->wifi_introspection);
+                       g_p_gdbus_mon->wifi_introspection = NULL;
                }
                return -1;
        }
@@ -2679,18 +2690,21 @@ int __init_introspection()
 
 void __deinit_introspection()
 {
-       if (gdbus_mon.daemon_introspection)
-               g_dbus_node_info_unref(gdbus_mon.daemon_introspection);
+       if (!g_p_gdbus_mon)
+               return;
+
+       if (g_p_gdbus_mon->daemon_introspection)
+               g_dbus_node_info_unref(g_p_gdbus_mon->daemon_introspection);
 
-       if (gdbus_mon.wifi_introspection)
-               g_dbus_node_info_unref(gdbus_mon.wifi_introspection);
+       if (g_p_gdbus_mon->wifi_introspection)
+               g_dbus_node_info_unref(g_p_gdbus_mon->wifi_introspection);
 
-       if (gdbus_mon.conn_introspection)
-               g_dbus_node_info_unref(gdbus_mon.conn_introspection);
+       if (g_p_gdbus_mon->conn_introspection)
+               g_dbus_node_info_unref(g_p_gdbus_mon->conn_introspection);
 
-       gdbus_mon.daemon_introspection = NULL;
-       gdbus_mon.wifi_introspection = NULL;
-       gdbus_mon.conn_introspection = NULL;
+       g_p_gdbus_mon->daemon_introspection = NULL;
+       g_p_gdbus_mon->wifi_introspection = NULL;
+       g_p_gdbus_mon->conn_introspection = NULL;
 }
 
 int inm_gdbus_init(bus_aquired_callback bus_acquired_cb,
@@ -2701,9 +2715,18 @@ int inm_gdbus_init(bus_aquired_callback bus_acquired_cb,
 
        __INM_FUNC_ENTER__;
 
-       memset(&gdbus_mon, 0x00, sizeof(gdbus_mon));
-       gdbus_mon.conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
-       if (gdbus_mon.conn == NULL) {
+       if (g_p_gdbus_mon) {
+               INM_LOGI("Already initialized");
+               return ret;
+       }
+       g_p_gdbus_mon = g_try_malloc0(sizeof(gdbus_mon_s));
+       if (!g_p_gdbus_mon) {
+               INM_LOGI("Memory alloc failed");
+               return INM_GDBUS_ERROR_OPERATION_FAILED;
+       }
+
+       g_p_gdbus_mon->conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+       if (g_p_gdbus_mon->conn == NULL) {
                if (error != NULL) {
                        INM_LOGE("Error! Failed to connect to the D-BUS daemon: [%s]",
                                        error->message);
@@ -2716,16 +2739,15 @@ int inm_gdbus_init(bus_aquired_callback bus_acquired_cb,
 
        if (__init_introspection() != 0) {
                INM_LOGE("Introspection initialize failed");
-               g_object_unref(gdbus_mon.conn);
+               g_object_unref(g_p_gdbus_mon->conn);
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_OPERATION_FAILED;
        }
 
-       gdbus_mon.is_initialized = TRUE;
-       gdbus_mon.bus_acquired_cb = bus_acquired_cb;
-       gdbus_mon.name_lost_cb = name_lost_cb;
+       g_p_gdbus_mon->bus_acquired_cb = bus_acquired_cb;
+       g_p_gdbus_mon->name_lost_cb = name_lost_cb;
 
-       gdbus_mon.owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
+       g_p_gdbus_mon->owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
                        INM_MANAGER_SERVICE,
                        G_BUS_NAME_OWNER_FLAGS_NONE,
                        __on_bus_acquired,
@@ -2733,7 +2755,7 @@ int inm_gdbus_init(bus_aquired_callback bus_acquired_cb,
                        __on_name_lost,
                        NULL,
                        NULL);
-       INM_LOGI("Request to Own [%u]", gdbus_mon.owner_id);
+       INM_LOGI("Request to Own [%u]", g_p_gdbus_mon->owner_id);
 
        __INM_FUNC_EXIT__;
        return ret;
@@ -2745,26 +2767,27 @@ int inm_gdbus_deinit()
 
        __INM_FUNC_ENTER__;
 
-       if (!gdbus_mon.is_initialized) {
+       if (!g_p_gdbus_mon) {
                __INM_FUNC_EXIT__;
                return INM_GDBUS_ERROR_NOT_INITIALIZED;
        }
 
-       if (gdbus_mon.wifi_obj_id)
-               g_dbus_connection_unregister_object(gdbus_mon.conn,
-                               gdbus_mon.wifi_obj_id);
+       if (g_p_gdbus_mon->wifi_obj_id)
+               g_dbus_connection_unregister_object(g_p_gdbus_mon->conn,
+                               g_p_gdbus_mon->wifi_obj_id);
 
-       if (gdbus_mon.daemon_obj_id)
-               g_dbus_connection_unregister_object(gdbus_mon.conn,
-                               gdbus_mon.daemon_obj_id);
+       if (g_p_gdbus_mon->daemon_obj_id)
+               g_dbus_connection_unregister_object(g_p_gdbus_mon->conn,
+                               g_p_gdbus_mon->daemon_obj_id);
 
-       g_bus_unown_name(gdbus_mon.owner_id);
+       g_bus_unown_name(g_p_gdbus_mon->owner_id);
 
-       g_object_unref(gdbus_mon.conn);
+       g_object_unref(g_p_gdbus_mon->conn);
 
        __deinit_introspection();
 
-       memset(&gdbus_mon, 0x00, sizeof(gdbus_mon));
+       g_free(g_p_gdbus_mon);
+       g_p_gdbus_mon = NULL;
 
        __INM_FUNC_EXIT__;
        return ret;