))
}
-typedef struct {
- signal_client_data_t *signal_client_data;
- int error;
-} registered_signal_t;
-
-
-static registered_signal_t subsession_register_event_in_list(client_callbacks_data_t *callbacks_data, GVariant *params, subsession_event_callback cb, void *cb_data) {
-
- registered_signal_t registered_signal = {0};
+static int subsession_register_event_in_list(client_callbacks_data_t *callbacks_data, GVariant *params, subsession_event_callback cb, void *cb_data, signal_client_data_t **client_data)
+{
+ assert(callbacks_data);
+ assert(client_data);
g_mutex_lock(&callbacks_data->mutex);
if (callbacks_data->list) {
GList *found_data = g_list_find_custom(callbacks_data->list, (gconstpointer)params, g_compare_session_uid);
if (found_data != NULL) {
- registered_signal.error = SUBSESSION_ERROR_ALREADY_EXISTS;
g_mutex_unlock(&callbacks_data->mutex);
- return registered_signal;
+ return SUBSESSION_ERROR_ALREADY_EXISTS;
}
}
signal_client_data_t *signal_client_data = make_new_signal_callback_client_data(cb, cb_data, params);
if (signal_client_data == NULL) {
- g_mutex_unlock(&callbacks_data->mutex);
- registered_signal.error = SUBSESSION_ERROR_OUT_OF_MEMORY;
- return registered_signal;
+ g_mutex_unlock(&callbacks_data->mutex);
+ return SUBSESSION_ERROR_OUT_OF_MEMORY;
}
callbacks_data->list = g_list_append(callbacks_data->list, signal_client_data);
- registered_signal.signal_client_data = signal_client_data;
- registered_signal.error = SUBSESSION_ERROR_NONE;
+ *client_data = signal_client_data;
g_mutex_unlock(&callbacks_data->mutex);
- return registered_signal;
+
+ return SUBSESSION_ERROR_NONE;
}
#define dbus_data_(callbacks_data_mt, params) \
callbacks_data_mt->dbus_signal, \
&callbacks_data_mt->dbus_signal_subscribed
-static int register_event_callback(client_callbacks_data_t *callbacks_data, GDBusSignalCallback signal_callback, int session_uid, subsession_event_callback cb, void *cb_data) {
-
+static int register_event_callback(client_callbacks_data_t *callbacks_data, GDBusSignalCallback signal_callback, int session_uid, subsession_event_callback cb, void *cb_data)
+{
return_if(
signal_callback_is_null(signal_callback,
session_uid_is_not_valid(session_uid,
return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY)
}
- registered_signal_t registered_signal = subsession_register_event_in_list(callbacks_data, params, cb, cb_data);
-
- if(registered_signal.error != SUBSESSION_ERROR_NONE) {
- LOGE("registered_signal.error = %d", registered_signal.error);
- return_with_log_error_result_(registered_signal.error);
+ signal_client_data_t *client_data = NULL;
+ int ret = subsession_register_event_in_list(callbacks_data, params, cb, cb_data, &client_data);
+ if (ret != SUBSESSION_ERROR_NONE) {
+ return_with_log_error_result_(ret);
}
int method_call_result = subscribe_and_call_method(
(gpointer) callbacks_data);
if (method_call_result == 0) {
- return SUBSESSION_ERROR_NONE;
+ return SUBSESSION_ERROR_NONE;
}
- LOGE("method_call_result == %d", method_call_result);
log_if_error_(method_call_result)
- client_data_cleansweep_mt(registered_signal.signal_client_data, callbacks_data);
+ client_data_cleansweep_mt(client_data, callbacks_data);
return method_call_result;
}
-static int subscribe_only_callback(client_callbacks_data_t *callbacks_data, GDBusSignalCallback signal_callback, int session_uid, subsession_event_callback cb, void *cb_data) {
+static int subscribe_only_callback(client_callbacks_data_t *callbacks_data, GDBusSignalCallback signal_callback, int session_uid, subsession_event_callback cb, void *cb_data)
+{
+ assert(callbacks_data);
GVariant *params = g_variant_new("(i)", session_uid);
if (params == NULL) {
return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY);
}
- registered_signal_t registered_signal = subsession_register_event_in_list(callbacks_data, params, cb, cb_data);
- if (registered_signal.error != SUBSESSION_ERROR_NONE) {
- return registered_signal.error;
+ signal_client_data_t *client_data = NULL;
+ int ret = subsession_register_event_in_list(callbacks_data, params, cb, cb_data, &client_data);
+ if (ret != SUBSESSION_ERROR_NONE) {
+ return ret;
}
MAKE_SURE_CONNECTION_IS_NOT_NULL(
- client_data_cleansweep_mt(registered_signal.signal_client_data, callbacks_data);
+ client_data_cleansweep_mt(client_data, callbacks_data);
);
if (callbacks_data->dbus_signal_subscribed == 0) {