From: Karol Lewandowski Date: Mon, 25 Jul 2022 22:21:55 +0000 (+0200) Subject: library: Merge dbus sync call helpers X-Git-Tag: submit/tizen/20220729.133354~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=57436d82c202d8a86b0918e4be59ae3fdc6721cd;p=platform%2Fcore%2Fsystem%2Fsessiond.git library: Merge dbus sync call helpers This commit merges method_call_no_signal() and method_call_no_signal_return() functions into one, as the only difference between these was that returned variant was passed to caller or not._ Change-Id: Idedac845a6b9690cade29f54dc9fbc372e7a8642 --- diff --git a/libsessiond/src/lib.c b/libsessiond/src/lib.c index 864c36c..96f8e57 100644 --- a/libsessiond/src/lib.c +++ b/libsessiond/src/lib.c @@ -543,70 +543,48 @@ static int subscribe_and_call_method(gchar *method, GVariant *params, gchar *sig return SUBSESSION_ERROR_NONE; } -static int method_call_no_signal(gchar *method, GVariant *params) { - - MAKE_SURE_CONNECTION_IS_NOT_NULL(); - - if(params == NULL) { - LOGE("params is NULL"); - return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY); - } - - GVariant *retgv = NULL; - GError *call_sync_error = NULL; - - retgv = g_dbus_connection_call_sync( - conn_config_, - method, params, - NULL, - G_DBUS_CALL_FLAGS_NONE, - libsessiond_default_timeout, - NULL, - &call_sync_error - ); - - if (!retgv || call_sync_error) { - LOGE("Dbus error: %s for method: %s", g_dbus_error_get_remote_error(call_sync_error), method); - int ret = map_dbus_call_error_to_return_value(call_sync_error); - log_if_error_(ret); - g_error_free(call_sync_error); - return ret; - } - - g_variant_unref(retgv); - return SUBSESSION_ERROR_NONE; -} +static int method_call_sync(gchar *method, GVariant *params, const GVariantType *out_type, GVariant **out) +{ + assert(method); -static int method_call_no_signal_return(gchar *method, GVariant *params, const GVariantType *out_type, GVariant **out) { + if (!params) + return SUBSESSION_ERROR_OUT_OF_MEMORY; MAKE_SURE_CONNECTION_IS_NOT_NULL(); - GVariant *retgv = NULL; - GError *call_sync_error; - call_sync_error = NULL; - - retgv = g_dbus_connection_call_sync( - conn_config_, - method, params, - out_type, - G_DBUS_CALL_FLAGS_NONE, - libsessiond_default_timeout, - NULL, - &call_sync_error - ); + GError *call_sync_error = NULL; + GVariant *retgv = g_dbus_connection_call_sync( + conn_config_, + method, + params, + out_type, // can be NULL + G_DBUS_CALL_FLAGS_NONE, + libsessiond_default_timeout, + NULL, + &call_sync_error + ); if (!retgv || call_sync_error) { - LOGE("Dbus error: %s for method: %s", g_dbus_error_get_remote_error(call_sync_error), method); + LOGE("Error while calling DBus method %s: %s", method, g_dbus_error_get_remote_error(call_sync_error)); int err = map_dbus_call_error_to_return_value(call_sync_error); log_if_error_(err) g_error_free(call_sync_error); return err; } - *out = retgv; + if (out) + *out = retgv; // passed to caller, thus no g_variant_unref(retgv) in this case + else + g_variant_unref(retgv); + return SUBSESSION_ERROR_NONE; } +static inline int method_call_sync_simple(gchar *method, GVariant *params) +{ + return method_call_sync(method, params, NULL, NULL); +} + static void callbacks_data_remove_client_data(client_callbacks_data_t *callbacks_data, signal_client_data_t *signal_client_data) { assert(callbacks_data); @@ -895,19 +873,19 @@ EXPORT_API int subsession_unregister_event_callback(int session_uid, subsession_ static int subsession_add_user_wait_done(int session_uid, subsession_user_t user) { GVariant * params = g_variant_new("(is)", session_uid, user); - return_with_log_error_result_(method_call_no_signal(dbus_method_call.AddUserDone, params)); + return_with_log_error_result_(method_call_sync_simple(dbus_method_call.AddUserDone, params)); } static int subsession_remove_user_wait_done(int session_uid,subsession_user_t user) { GVariant * params = g_variant_new("(is)", session_uid, user); - return_with_log_error_result_(method_call_no_signal(dbus_method_call.RemoveUserDone, params)); + return_with_log_error_result_(method_call_sync_simple(dbus_method_call.RemoveUserDone, params)); } static int subsession_switch_wait_done(int session_uid, uint64_t switch_id) { GVariant * params = g_variant_new("(ix)", session_uid, (gint64)switch_id); - return_with_log_error_result_(method_call_no_signal(dbus_method_call.SwitchUserDone, params)); + return_with_log_error_result_(method_call_sync_simple(dbus_method_call.SwitchUserDone, params)); } EXPORT_API int subsession_event_wait_done(subsession_event_info info) { @@ -944,15 +922,16 @@ EXPORT_API int subsession_event_wait_done(subsession_event_info info) { return_with_log_error_result_( SUBSESSION_ERROR_INVALID_PARAMETER) } -EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **user_list, int *user_count) { - +EXPORT_API int subsession_get_user_list(int session_uid, subsession_user_t **user_list, int *user_count) +{ return_if(session_uid_is_not_valid(session_uid, user_count_ptr_is_null(user_count))) g_autoptr(GVariant) out = NULL; - int ret = method_call_no_signal_return(dbus_method_call.GetUserList, - g_variant_new("(i)", session_uid), - G_VARIANT_TYPE("(as)"), - &out); + int ret = method_call_sync(dbus_method_call.GetUserList, + g_variant_new("(i)", session_uid), + G_VARIANT_TYPE("(as)"), + &out + ); if (ret != SUBSESSION_ERROR_NONE) return ret;