Reduce some copy-paste 07/276107/1
authorMichal Bloch <m.bloch@samsung.com>
Thu, 9 Jun 2022 13:12:14 +0000 (15:12 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Thu, 9 Jun 2022 13:12:41 +0000 (15:12 +0200)
Fixes a memleak in one of the functions.

Change-Id: I773142fa1061083e2065072a07d4df02d8f342ea
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
libsessiond/src/lib.c

index da9b137..26ede1c 100644 (file)
@@ -185,6 +185,30 @@ static int map_dbus_call_error_to_return_value(const GError *error) {
        return SUBSESSION_ERROR_IO_ERROR;
 }
 
+static int make_sure_connection_is_not_null()
+{
+       // FIXME: mutex got me feeling so free, we're gonna celebrate
+
+       if (session_connection_data.connection)
+               return 0;
+
+       GError *error = NULL;
+       session_connection_data.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+       if (error) {
+               g_error_free(error);
+               return SUBSESSION_ERROR_NOT_AVAILABLE;
+       }
+
+       return 0;
+}
+#define MAKE_SURE_CONNECTION_IS_NOT_NULL(cleanup) do { \
+       const int _r = make_sure_connection_is_not_null(); \
+       if (_r) { \
+               cleanup; \
+               return _r; \
+       } \
+} while (0)
+
 static signal_client_data_t *make_new_signal_callback_client_data(void *client_callback, void *client_callback_data, GVariant *params) {
 
        if(params == NULL) {
@@ -644,15 +668,7 @@ static void  signal_switch_user_completion_handler( GDBusConnection *connection,
 
 static int subscribe_and_call_method(gchar *method, GVariant *params, gchar *signal_name, guint *signal_subscribed_id, GDBusSignalCallback signal_callback, gpointer client_callbacks) {
 
-       GError *error = NULL;
-
-       if (session_connection_data.connection == NULL) {
-               session_connection_data.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
-               if(error != NULL) {
-                       g_error_free(error);
-                       return SUBSESSION_ERROR_NOT_AVAILABLE;
-               }
-       }
+       MAKE_SURE_CONNECTION_IS_NOT_NULL();
 
        if( *signal_subscribed_id == 0 ) {
                        *signal_subscribed_id = g_dbus_connection_signal_subscribe(
@@ -689,15 +705,8 @@ static int subscribe_and_call_method(gchar *method, GVariant *params, gchar *sig
 
 static int method_call_no_signal(gchar *method, GVariant *params) {
 
-       GError *error = NULL;
+       MAKE_SURE_CONNECTION_IS_NOT_NULL();
 
-       if (session_connection_data.connection == NULL) {
-               session_connection_data.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
-               if(error != NULL) {
-                       g_error_free(error);
-                       return SUBSESSION_ERROR_NOT_AVAILABLE;
-               }
-       }
        if(params == NULL) {
                return  SUBSESSION_ERROR_OUT_OF_MEMORY;
        }
@@ -727,15 +736,7 @@ static int method_call_no_signal(gchar *method, GVariant *params) {
 
 static int method_call_no_signal_return(gchar *method, GVariant *params, const GVariantType *out_type, GVariant **out) {
 
-       GError *error;
-       error = NULL;
-
-       if (session_connection_data.connection == NULL) {
-               session_connection_data.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
-               if(error != NULL) {
-                       return SUBSESSION_ERROR_NOT_AVAILABLE;
-               }
-       }
+       MAKE_SURE_CONNECTION_IS_NOT_NULL();
 
        GVariant *retgv = NULL;
        GError *call_sync_error;
@@ -1029,16 +1030,9 @@ int subscribe_only_callback(client_callbacks_data_t *callbacks_data, GDBusSignal
                return SUBSESSION_ERROR_NONE;
        }
 
-       GError *error = NULL;
-
-       if (session_connection_data.connection == NULL) {
-               session_connection_data.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
-               if(error != NULL) {
-                       g_error_free(error);
-                       client_data_cleansweep_mt(registered_signal.signal_client_data, callbacks_data);
-                       return SUBSESSION_ERROR_NOT_AVAILABLE;
-               }
-       }
+       MAKE_SURE_CONNECTION_IS_NOT_NULL(
+               client_data_cleansweep_mt(registered_signal.signal_client_data, callbacks_data);
+       );
 
        if (callbacks_data->dbus_signal_subscribed == 0) {
                callbacks_data->dbus_signal_subscribed = g_dbus_connection_signal_subscribe(
@@ -1203,15 +1197,7 @@ EXPORT_API int subsession_get_current_user(int session_uid, int *user) {
        return_if(session_uid_is_not_valid(session_uid,
                current_user_ptr_is_null(user)))
 
-       GError *error = NULL;
-
-       if (session_connection_data.connection == NULL) {
-               session_connection_data.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
-               if(error != NULL) {
-                       g_error_free(error);
-                       return SUBSESSION_ERROR_NOT_AVAILABLE;
-               }
-       }
+       MAKE_SURE_CONNECTION_IS_NOT_NULL();
 
        GVariant * params = g_variant_new("(i)", session_uid);
        if(params == NULL) {