Move subscribe dbus signal later 24/303724/2
authorSukhyungKang <shine.kang@samsung.com>
Thu, 4 Jan 2024 01:47:34 +0000 (10:47 +0900)
committerSukhyungKang <shine.kang@samsung.com>
Thu, 4 Jan 2024 02:14:56 +0000 (11:14 +0900)
- dbus signal can be unsubscribe in case delete and add noti almost same
time. so move subscribe later to avoid this.

Change-Id: Ife3480693ec5c6888802e095321cd0efc2c2a0db
Signed-off-by: SukhyungKang <shine.kang@samsung.com>
notification/include/notification_ipc.h
notification/src/notification_internal.c
notification/src/notification_ipc.c

index b88de0a..1889931 100644 (file)
@@ -107,6 +107,8 @@ int notification_ipc_socket_get_write_buf_size(int fd, unsigned int *size);
 int notification_ipc_socket_write(int fd, const char *buffer, unsigned int nbytes);
 int notification_ipc_socket_write_string(int fd, const char *buffer, unsigned int string_len);
 int notification_ipc_socket_read(int fd, char *buffer, unsigned int nbytes);
+
+int notification_ipc_event_monitor_init(void);
 #ifdef __cplusplus
 }
 #endif
index 79059f9..045d8a2 100644 (file)
@@ -1151,6 +1151,7 @@ EXPORT_API int notification_insert_for_uid(notification_h noti,
 {
        int ret;
        int id;
+       bool event_flag;
 
        if (noti == NULL)
                return NOTIFICATION_ERROR_INVALID_PARAMETER;
@@ -1172,6 +1173,16 @@ EXPORT_API int notification_insert_for_uid(notification_h noti,
        if (priv_id != NULL)
                *priv_id = noti->priv_id;
 
+       ret = notification_get_event_flag(noti, &event_flag);
+       if (ret != NOTIFICATION_ERROR_NONE)
+               return ret;
+
+       if (event_flag == true) {
+               ret = notification_ipc_event_monitor_init();
+               if (ret != NOTIFICATION_ERROR_NONE)
+                       return ret;
+       }
+
        return NOTIFICATION_ERROR_NONE;
 }
 
@@ -1420,6 +1431,7 @@ EXPORT_API int notification_post_for_uid(notification_h noti, uid_t uid)
        int ret = 0;
        int id = 0;
        GList *file_list;
+       bool event_flag;
 
        if (noti == NULL)
                return NOTIFICATION_ERROR_INVALID_PARAMETER;
@@ -1437,6 +1449,16 @@ EXPORT_API int notification_post_for_uid(notification_h noti, uid_t uid)
        if (ret == NOTIFICATION_ERROR_NONE) {
                noti->priv_id = id;
                INFO("Posted notification id[%d]", id);
+
+               ret = notification_get_event_flag(noti, &event_flag);
+               if (ret != NOTIFICATION_ERROR_NONE)
+                       return ret;
+
+               if (event_flag == true) {
+                       ret = notification_ipc_event_monitor_init();
+                       if (ret != NOTIFICATION_ERROR_NONE)
+                               return ret;
+               }
        } else {
                g_list_foreach(file_list, __remove_private_file, NULL);
        }
@@ -1716,6 +1738,10 @@ EXPORT_API int notification_post_with_event_cb_for_uid(notification_h noti, even
        find_list = g_list_find_custom(__noti_event_cb_list, GINT_TO_POINTER(priv_id),
                                       (GCompareFunc)__priv_id_compare);
 
+       ret = notification_ipc_event_monitor_init();
+       if (ret != NOTIFICATION_ERROR_NONE)
+               return ret;
+
        if (find_list) {
                info = g_list_nth_data(find_list, 0);
                info->cb = cb;
index aa39bda..62a08e2 100644 (file)
@@ -371,7 +371,7 @@ static void _add_noti_notify(GVariant *parameters)
        GVariant *body = NULL;
        uid_t uid;
 
-       DBG("add noti notify");
+       WARN("add noti notify");
        noti = notification_create(NOTIFICATION_TYPE_NOTI);
        if (!noti) {
                ERR("Failed to create notification handle");
@@ -572,7 +572,7 @@ static void _handle_noti_notify(GDBusConnection *connection,
                GVariant        *parameters,
                gpointer         user_data)
 {
-       DBG("own_name : %s signal_name: %s",
+       WARN("own_name : %s signal_name: %s",
                        g_dbus_connection_get_unique_name(connection),
                        signal_name);
 
@@ -672,7 +672,7 @@ static int _dbus_event_handler_signal_init(void)
                                NULL,
                                NULL);
 
-               DBG("subscribe id[%d]", id);
+               WARN("subscribe id[%d]", id);
                if (id == 0) {
                        ret = NOTIFICATION_ERROR_IO_ERROR;
                        ERR("Failed to subscribe connection signal");
@@ -684,7 +684,6 @@ static int _dbus_event_handler_signal_init(void)
        return ret;
 }
 
-/* LCOV_EXCL_START */
 static int _dbus_signal_init(void)
 {
        int id;
@@ -702,7 +701,7 @@ static int _dbus_signal_init(void)
                                NULL,
                                NULL);
 
-               DBG("subscribe id : %d", id);
+               WARN("subscribe id : %d", id);
                if (id == 0) {
                        ret = NOTIFICATION_ERROR_IO_ERROR;
                        ERR("Failed to register dbus_interface");
@@ -929,16 +928,15 @@ static int _send_async_noti(GVariant *body, result_cb_item *cb_item, char *cmd)
 }
 /* LCOV_EXCL_STOP */
 
-
 int notification_ipc_request_insert(notification_h noti, int *priv_id)
 {
        int result;
        int id = NOTIFICATION_PRIV_ID_NONE;
-       bool event_flag;
        GDBusMessage *reply = NULL;
        GVariant *body;
        GVariant *reply_body;
 
+       WARN("request insert noti");
        result = _dbus_init();
        if (result != NOTIFICATION_ERROR_NONE) {
                /* LCOV_EXCL_START */
@@ -947,16 +945,6 @@ int notification_ipc_request_insert(notification_h noti, int *priv_id)
                /* LCOV_EXCL_STOP */
        }
 
-       result = notification_get_event_flag(noti, &event_flag);
-       if (result != NOTIFICATION_ERROR_NONE)
-               return result;
-
-       if (event_flag == true && event_monitor_id == 0) {
-               result = _dbus_event_handler_signal_init();
-               if (result != NOTIFICATION_ERROR_NONE)
-                       return result;
-       }
-
        /* Initialize private ID */
        noti->group_id = NOTIFICATION_GROUP_ID_NONE;
        noti->internal_group_id = NOTIFICATION_GROUP_ID_NONE;
@@ -984,7 +972,7 @@ int notification_ipc_request_insert(notification_h noti, int *priv_id)
        if (reply)
                g_object_unref(reply);
 
-       DBG("priv_id[%d] result[%d]", id, result);
+       WARN("priv_id[%d] result[%d]", id, result);
        return result;
 }
 
@@ -1100,6 +1088,7 @@ int notification_ipc_request_delete_single(notification_type_e type, char *app_i
        GVariant *body;
        GVariant *reply_body;
 
+       WARN("request del noti [%d]", priv_id);
        result = _dbus_init();
        if (result != NOTIFICATION_ERROR_NONE) {
                /* LCOV_EXCL_START */
@@ -1119,7 +1108,7 @@ int notification_ipc_request_delete_single(notification_type_e type, char *app_i
        if (reply)
                g_object_unref(reply);
 
-       DBG("result[%d]", result);
+       WARN("result[%d]", result);
        return result;
 }
 
@@ -2728,5 +2717,14 @@ void notification_ipc_event_monitor_fini(void)
 
        g_dbus_connection_signal_unsubscribe(_gdbus_conn, event_monitor_id);
        event_monitor_id = 0;
+       WARN("event monitor fini");
+}
+/* LCOV_EXCL_STOP */
+
+/* LCOV_EXCL_START */
+int notification_ipc_event_monitor_init(void)
+{
+       WARN("event monitor init");
+       return _dbus_event_handler_signal_init();
 }
 /* LCOV_EXCL_STOP */