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) {
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(
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;
}
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;
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(
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) {