From 722ff8a21147e112e0e971e68e5e2819dc51683d Mon Sep 17 00:00:00 2001 From: SukhyungKang Date: Fri, 8 Dec 2023 14:31:35 +0900 Subject: [PATCH] add dbus connection flush after emit signal Change-Id: I6ffa14f3ca4c30b21cd3c1c372f7c16506c0fe60 Signed-off-by: SukhyungKang --- src/service_common.cc | 24 ++++++++++++++++++----- tests/mock/gio_mock.cc | 5 +++++ tests/mock/gio_mock.h | 3 +++ tests/unit_tests/src/test_notification_service.cc | 5 +++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/service_common.cc b/src/service_common.cc index 529ae5b..4983cce 100644 --- a/src/service_common.cc +++ b/src/service_common.cc @@ -285,18 +285,24 @@ int send_notify(GVariant *body, char *cmd, GHashTable **monitoring_hash, &err) == FALSE) { if (err != nullptr) { ERR("Emit signal err [%s]", err->message); - g_error_free(err); + g_clear_error(&err); } is_existed = is_existed_busname(target_bus_name); if (is_existed == false) delete_monitoring_list(monitoring_hash, target_bus_name, uid); ERR("Fail, emit signal to [%s]", target_bus_name); } + + if (g_dbus_connection_flush_sync(_gdbus_conn, NULL, &err) == FALSE) { + ERR("Failed to flush connection[%s]", err ? err->message : ""); + g_clear_error(&err); + } + monitoring_count++; - DBG("Success, emit signal to [%s]", target_bus_name); + WARN("Success, emit signal to [%s]", target_bus_name); } - DBG("Success, cmd[%s] monitoring count[%d]", cmd, monitoring_count); + WARN("Success, cmd[%s] monitoring count[%d]", cmd, monitoring_count); return SERVICE_COMMON_ERROR_NONE; } @@ -317,12 +323,20 @@ int send_event_notify_by_busname(GVariant *body, char *cmd, char *busname, if (err != nullptr) { ERR("Emit signal err [%s]", err->message); - g_error_free(err); + g_clear_error(&err); } ERR("Failed to emit signal to [%s]", busname); return SERVICE_COMMON_ERROR_IO_ERROR; } - DBG("Success, Emit signal to [%s] cmd[%s]", busname, cmd); + + if (g_dbus_connection_flush_sync(_gdbus_conn, NULL, &err) == FALSE) { + ERR("Failed to flush connection[%s]", err ? err->message : ""); + g_clear_error(&err); + + return SERVICE_COMMON_ERROR_IO_ERROR; + } + + WARN("Success, Emit signal to [%s] cmd[%s]", busname, cmd); return SERVICE_COMMON_ERROR_NONE; } diff --git a/tests/mock/gio_mock.cc b/tests/mock/gio_mock.cc index 38979e2..c0e071b 100644 --- a/tests/mock/gio_mock.cc +++ b/tests/mock/gio_mock.cc @@ -126,3 +126,8 @@ extern "C" GDBusConnection* g_bus_get_sync(GBusType type, GCancellable* cancellable, GError** error) { return MOCK_HOOK_P3(GioMock, g_bus_get_sync, type, cancellable, error); } + +extern "C" gboolean g_dbus_connection_flush_sync(GDBusConnection* arg0, + GCancellable* arg1, GError** arg2) { + return MOCK_HOOK_P3(GioMock, g_dbus_connection_flush_sync, arg0, arg1, arg2); +} diff --git a/tests/mock/gio_mock.h b/tests/mock/gio_mock.h index 3792e0d..6804628 100644 --- a/tests/mock/gio_mock.h +++ b/tests/mock/gio_mock.h @@ -86,6 +86,9 @@ class GioMock : public virtual ModuleMock { MOCK_METHOD3(g_bus_get_sync, GDBusConnection*(GBusType, GCancellable*, GError**)); + MOCK_METHOD3(g_dbus_connection_flush_sync, + gboolean(GDBusConnection*, GCancellable*, GError**)); + }; #endif // MOCK_GIO_MOCK_H_ \ No newline at end of file diff --git a/tests/unit_tests/src/test_notification_service.cc b/tests/unit_tests/src/test_notification_service.cc index 17c3d00..ab86258 100644 --- a/tests/unit_tests/src/test_notification_service.cc +++ b/tests/unit_tests/src/test_notification_service.cc @@ -438,6 +438,9 @@ TEST_F(NotificationServiceTest, notification_send_noti_event) { EXPECT_CALL(GetMock(), g_bus_watch_name(_, _, _, _, _, _, _)) .WillOnce(Return(1)); + EXPECT_CALL(GetMock(), g_dbus_connection_flush_sync(_, _, _)) + .WillRepeatedly(Return(true)); + int ret = notification_reset_event_receiver(param2, &reply2, "sender"); EXPECT_EQ(ret, NOTIFICATION_ERROR_NONE); ret = notification_send_noti_event(param, &reply); @@ -460,6 +463,8 @@ TEST_F(NotificationServiceTest, notification_send_noti_event_by_priv_id) { .WillOnce(Return(1)); EXPECT_CALL(GetMock(), notification_create(_)) .WillOnce(Return(info)); + EXPECT_CALL(GetMock(), g_dbus_connection_flush_sync(_, _, _)) + .WillRepeatedly(Return(true)); GVariant* param2 = g_variant_new("(i)", 20); GVariant* reply2; int ret = notification_reset_event_receiver(param2, &reply2, "sender"); -- 2.7.4