library: Merge dbus sync call helpers 48/278748/2
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Mon, 25 Jul 2022 22:21:55 +0000 (00:21 +0200)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Tue, 26 Jul 2022 22:40:47 +0000 (00:40 +0200)
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

libsessiond/src/lib.c

index 864c36cd164209498935d31d187604ab22b01ef0..96f8e57f05e1c161c3328d22fa8e94dea0767d08 100644 (file)
@@ -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;