gpointer client_data) {
if (parameters == NULL || client_data == NULL) {
- return;
+ LOGE("parameters: (%s), client_data: (%s)", parameters == NULL ? "NULL" : "OK", client_data == NULL ? "NULL" : "OK");
}
client_callbacks_data_t *client_callbacks_data = (client_callbacks_data_t *)client_data;
if(client_callbacks_data->list == NULL) {
+ LOGE("list is NULL");
return;
}
signal_client_data_t *signal_data = find_in_callbacks_data(client_callbacks_data, parameters, g_compare_session_uid_params_wait);
- if(signal_data == NULL || signal_data->client_callback == NULL || signal_data->client_callback_data == NULL ) {
+ if(signal_data == NULL || signal_data->client_callback == NULL ) {
+ LOGE("signal data: (%s), callback (%s)", signal_data == NULL ? "NULL" : "not NULL", signal_data->client_callback == NULL ? "NULL" : "not NULL");
return ;
}
gpointer client_data)
{
if(parameters == NULL || client_data == NULL) {
+ LOGE("arameters: (%s), client data: (%s)", parameters == NULL ? "NULL" : "not NULL", client_data == NULL ? "NULL" : "not NULL");
return;
}
client_callbacks_data_t *client_callbacks_data = (client_callbacks_data_t *)client_data;
if(client_callbacks_data->list == NULL) {
+ LOGE("client_callbacks_data->list is NULL");
return;
}
signal_client_data_t *signal_data = find_in_callbacks_data(client_callbacks_data, parameters, g_compare_session_uid_params_wait);
- if(signal_data == NULL || signal_data->client_callback == NULL || signal_data->client_callback_data == NULL ) {
+ if(signal_data == NULL || signal_data->client_callback == NULL ) {
+ LOGE("signal data (%s), callback (%s)", signal_data == NULL ? "NULL" : "not NULL", signal_data->client_callback == NULL ? "NULL" : "not NULL");
return ;
}
- if(signal_data->client_callback_data == NULL) {
- return ;
- }
subsession_event_info event_info;
gpointer client_data)
{
if (parameters == NULL || client_data == NULL) {
+ LOGE("parameters: (%s) client_data: (%s)", parameters == NULL ? "NULL" : "not NULL", client_data == NULL ? "NULL" : "not NULL");
return;
}
signal_client_data_t *signal_data = find_in_callbacks_data(client_callbacks_data, parameters, g_compare_session_uid_params_switch_wait);
- if(signal_data == NULL || signal_data->client_callback == NULL || signal_data->client_callback_data == NULL) {
+ if(signal_data == NULL || signal_data->client_callback == NULL ) {
+ LOGE("signal data: (%s), callback (%s)", signal_data == NULL ? "NULL" : "not NULL", signal_data->client_callback == NULL ? "NULL" : "not NULL");
return ;
}
subsession_event_info event_info = {0};
gpointer client_data)
{
if (parameters == NULL) {
+ LOGE("parameters is NULL");
return;
}
client_callbacks_data_t *client_callbacks_data = client_data;
if(client_data == NULL || client_callbacks_data->list == NULL) {
+ LOGE("client data: (%s), client callbacks data list (%s)", client_data == NULL ? "NULL" : "not NULL", client_callbacks_data->list == NULL ? "NULL" : "not NULL");
return;
}
signal_client_data_t *signal_data = find_in_callbacks_data(client_callbacks_data, parameters, g_compare_session_uid_params_switch_wait);
- if(signal_data == NULL || signal_data->client_callback == NULL || signal_data->client_callback_data == NULL) {
+ if(signal_data == NULL || signal_data->client_callback == NULL) {
+ LOGE("signal data: (%s), callback (%s)", signal_data == NULL ? "NULL" : "not NULL", signal_data->client_callback == NULL ? "NULL" : "not NULL");
return ;
}
);
if (!retgv || call_sync_error) {
+ LOGE("Dbus error: %s for method: %s" , g_dbus_error_get_remote_error(call_sync_error), method);
int err = map_dbus_call_error_to_return_value(call_sync_error);
+ log_if_error_(err);
g_error_free(call_sync_error);
return err;
}
MAKE_SURE_CONNECTION_IS_NOT_NULL();
if(params == NULL) {
- return SUBSESSION_ERROR_OUT_OF_MEMORY;
+ return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY);
}
GVariant *retgv = NULL;
);
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;
}
);
if (!retgv || call_sync_error) {
+ LOGE("Dbus error: %s for method: %s", g_dbus_error_get_remote_error(call_sync_error), method);
int err = map_dbus_call_error_to_return_value(call_sync_error);
+ log_if_error_(err)
g_error_free(call_sync_error);
return err;
}
if(callbacks_data->list == NULL) {
signal_client_data_t *signal_client_empty_data = make_new_signal_callback_client_data(NULL, NULL, params);
if(signal_client_empty_data == NULL) {
- return SUBSESSION_ERROR_OUT_OF_MEMORY;
+ return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY)
}
callbacks_data->list = g_list_append(callbacks_data->list, (gpointer) signal_client_empty_data);
}
, res
, &err
);
+ if(err != NULL) {
+ LOGE("Dbus error: %s map to: %d", g_dbus_error_get_remote_error(err), map_dbus_call_error_to_return_value(err));
+
+ }
/* The reply contains nothing useful, we only use it
* to receive information about the error, really. */
user_id_is_not_valid(user))
)
- return call_method_async
+ return_with_log_error_result_(call_method_async
( dbus_method_call.AddUser
, g_variant_new("(ii)", session_uid, user)
, cb, cb_data
- );
+ ))
}
EXPORT_API int subsession_remove_user(int session_uid, int user, subsession_reply_callback cb, void *cb_data) {
int_not_valid(user))
)
- return call_method_async
+ return_with_log_error_result_(call_method_async
( dbus_method_call.RemoveUser
, g_variant_new("(ii)", session_uid, user)
, cb, cb_data
- );
+ ))
}
EXPORT_API int subsession_switch_user(int session_uid, int next_user, subsession_reply_callback cb, void *cb_data) {
int_not_valid_on_switch(next_user))
)
- return call_method_async
+ return_with_log_error_result_(call_method_async
( dbus_method_call.SwitchUser
, g_variant_new("(ii)", session_uid, next_user)
, cb, cb_data
- );
+ ))
}
#define cb_data_ cb, cb_data
callbacks_data_are_null(callbacks_data,
signal_callback_is_null(signal_callback,
session_uid_is_not_valid(session_uid,
- callback_is_null(cb,
- callbacks_data_are_null(cb)))))
+ callback_is_null(cb))))
)
GVariant * params = g_variant_new("(i)", session_uid);
if(params == NULL) {
- return SUBSESSION_ERROR_OUT_OF_MEMORY;
+ return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY)
}
registered_signal_t registered_signal = subsession_register_event_in_list(callbacks_data, default_wait_params_, cb_data_ );
if(registered_signal.error != SUBSESSION_ERROR_NONE) {
- return registered_signal.error;
+ return_with_log_error_result_(registered_signal.error);
}
int method_call_result = subscribe_and_call_method(
GVariant * params = g_variant_new("(i)", session_uid);
if(params == NULL) {
- return SUBSESSION_ERROR_OUT_OF_MEMORY;
+ return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY);
}
registered_signal_t registered_signal = subsession_register_event_in_list(callbacks_data, default_wait_params_, cb_data_ );
signal_client_data_t *signal_data = take_from_callbacks_data_and_remove_from_list(callbacks_data, gv_session_uid, g_compare_session_uid_params);
if(signal_data == NULL) {
- return SUBSESSION_ERROR_NOT_AVAILABLE;
+ return_with_log_error_result_(SUBSESSION_ERROR_NOT_AVAILABLE)
}
free(signal_data);
int subsession_add_user_wait_done(int session_uid, int user) {
GVariant * params = g_variant_new("(ii)", session_uid, user);
- return method_call_no_signal(dbus_method_call.AddUserDone, params);
+ return_with_log_error_result_(method_call_no_signal(dbus_method_call.AddUserDone, params));
}
int subsession_remove_user_wait_done(int session_uid, int user) {
GVariant * params = g_variant_new("(ii)", session_uid, user);
- return method_call_no_signal(dbus_method_call.RemoveUserDone, params);
+ return_with_log_error_result_(method_call_no_signal(dbus_method_call.RemoveUserDone, params));
}
int subsession_switch_wait_done(int session_uid, uint64_t switch_id) {
GVariant * params = g_variant_new("(ix)", session_uid, (gint64)switch_id);
- return method_call_no_signal(dbus_method_call.SwitchUserDone, params);
+ return_with_log_error_result_(method_call_no_signal(dbus_method_call.SwitchUserDone, params));
}
EXPORT_API int subsession_event_wait_done(subsession_event_info info) {
GVariant * params = g_variant_new("(i)", session_uid);
if(params == NULL) {
- return SUBSESSION_ERROR_OUT_OF_MEMORY;
+ return_with_log_error_result_(SUBSESSION_ERROR_OUT_OF_MEMORY)
}
GVariant *retgv = NULL;
);
if (!retgv || call_sync_error) {
+ LOGE("Dbus error: %s for method: %s", g_dbus_error_get_remote_error(call_sync_error), dbus_method_call.GetCurrentUser);
int ret = map_dbus_call_error_to_return_value(call_sync_error);
+ log_if_error_(ret);
g_error_free(call_sync_error);
return ret;
}
#define user_count_ptr_is_null(a, ...) || (a == NULL) __VA_ARGS__
#define current_user_ptr_is_null(a, ...) || (a == NULL) __VA_ARGS__
-#define ret_if_err_(func_) \
+#define log_if_error_(error_) \
+ switch(error_) { \
+ case SUBSESSION_ERROR_NONE: \
+ break; \
+ case SUBSESSION_ERROR_INVALID_PARAMETER: \
+ LOGE("%d: Invalid parameter", error_);\
+ break; \
+ case SUBSESSION_ERROR_IO_ERROR: \
+ LOGE("%d: IO error", error_);\
+ break; \
+ case SUBSESSION_ERROR_OUT_OF_MEMORY: \
+ LOGE("%d: Out of memory", error_);\
+ break; \
+ case SUBSESSION_ERROR_ALREADY_EXISTS: \
+ LOGE("%d: Already exists", error_);\
+ break; \
+ case SUBSESSION_ERROR_NOT_AVAILABLE: \
+ LOGE("%d: Not available", error_);\
+ break; \
+ case SUBSESSION_ERROR_RESOURCE_BUSY: \
+ LOGE("%d: Resource busy", error_);\
+ break; \
+ case SUBSESSION_ERROR_PERMISSION_DENIED: \
+ LOGE("%d: Permission denied", error_);\
+ break; \
+ default: \
+ LOGE("%d", error_);\
+ }
+
+#define return_with_log_error_result_(func_) \
int err_ = func_; \
- if(err_) {return err_ ;}
+ if(err_) { \
+ log_if_error_(err_); \
+ } \
+ return err_;
-#define error_if(a, error) if ( (0) a ) { return error; }
+#define ret_if_err_(func_) { \
+ int err_ = func_; \
+ if(err_) { \
+ log_if_error_(err_); \
+ return err_ ; \
+ }}
+
+#define error_if(a, error_) if ( (0) a ) { \
+ log_if_error_(error_) \
+ return error_; \
+}
+
+#define diff_if_not_compared_(a, error_) if ( (0) a ) { \
+ return error_; \
+}
-#define maybe_not_comparable_if(a) error_if(a, COMPARATOR_RESULT_DIFFERENT_)
+#define maybe_not_comparable_if(a) diff_if_not_compared_(a, COMPARATOR_RESULT_DIFFERENT_)
#define return_if(a) error_if(a, SUBSESSION_ERROR_INVALID_PARAMETER)
#ifdef __cplusplus