Also happens to fix some functions referencing the wrong union member.
Changes in:
- public interface header (libsessiond.h) authored by Karol Lewandowski
- the rest implemented by Michal Bloch
Change-Id: I5dde2519a85c2e0ab3fc9621324eb140b0825743
SUBSESSION_EVENT_ALL = ~0,
} subsession_event_type_e;
-typedef union subsession_event_info {
- struct add_user {
- subsession_event_type_e event;
- int session_uid;
- int user;
- } add_user;
-
- struct remove_user {
- subsession_event_type_e event;
- int session_uid;
- int user;
- } remove_user;
-
- struct switch_user {
- subsession_event_type_e event;
- int session_uid;
- uint64_t switch_id;
- int prev_user;
- int next_user;
- } switch_user;
+typedef struct subsession_event_info {
+
+ subsession_event_type_e event;
+ int session_uid;
+
+ union {
+ struct {
+ int user;
+ } add_user;
+
+ struct {
+ int user;
+ } remove_user;
+
+ struct {
+ uint64_t switch_id;
+ int prev_user;
+ int next_user;
+ } switch_user;
+ };
} subsession_event_info;
/**
subsession_event_info event_info;
- event_info.add_user.event = SUBSESSION_ADD_USER_WAIT;
- maybe_g_variant_get_void_(parameters, "(ii)", &event_info.add_user.session_uid, &event_info.add_user.user);
+ event_info.event = SUBSESSION_ADD_USER_WAIT;
+ maybe_g_variant_get_void_(parameters, "(ii)", &event_info.session_uid, &event_info.add_user.user);
subsession_event_callback event_callback = signal_data->client_callback;
event_callback(event_info, signal_data->client_callback_data);
subsession_event_info event_info;
- event_info.remove_user.event = SUBSESSION_REMOVE_USER_WAIT;
- maybe_g_variant_get_void_(parameters, "(ii)", &event_info.remove_user.session_uid, &event_info.remove_user.user);
+ event_info.event = SUBSESSION_REMOVE_USER_WAIT;
+ maybe_g_variant_get_void_(parameters, "(ii)", &event_info.session_uid, &event_info.remove_user.user);
subsession_event_callback event_callback = signal_data->client_callback;
event_callback(event_info, signal_data->client_callback_data);
}
subsession_event_info event_info = {0};
- event_info.switch_user.event = SUBSESSION_SWITCH_USER_WAIT;
+ event_info.event = SUBSESSION_SWITCH_USER_WAIT;
maybe_g_variant_get_void_(parameters, "(ixii)",
- &event_info.remove_user.session_uid,
+ &event_info.session_uid,
&event_info.switch_user.switch_id,
&event_info.switch_user.prev_user,
&event_info.switch_user.next_user);
}
subsession_event_info event_info = {0};
- event_info.switch_user.event = SUBSESSION_SWITCH_USER_COMPLETION;
+ event_info.event = SUBSESSION_SWITCH_USER_COMPLETION;
maybe_g_variant_get_void_(parameters, "(ixii)",
- &event_info.remove_user.session_uid,
+ &event_info.session_uid,
&event_info.switch_user.switch_id,
&event_info.switch_user.prev_user,
&event_info.switch_user.next_user);
if(cb_data == NULL) return -1;
user_data->user_id = info.add_user.user;
- user_data->session_uid = info.add_user.session_uid;
+ user_data->session_uid = info.session_uid;
- user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.add_user.event, info);
+ user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.event, info);
g_atomic_int_inc(&callback_adduserstarted_reference);
return 0;
TEST(subsession_event_wait_err_test, FailAtEventWaitBadMask) {
- subsession_event_info e_info = { .switch_user = {.event = SUBSESSION_EVENT_ALL,
+ subsession_event_info e_info = {
+ .event = SUBSESSION_EVENT_ALL,
.session_uid = subsession_5001::subsession_uid(),
- .switch_id = 1,
- .prev_user = TestUser::user_1,
- .next_user = TestUser::user_2 },
+ .switch_user = {
+ .switch_id = 1,
+ .prev_user = TestUser::user_1,
+ .next_user = TestUser::user_2
+ }
};
std::array<res_t, test_actions> results {
if(cb_data == NULL) return -1;
user_data->user_id = info.add_user.user;
- user_data->session_uid = info.add_user.session_uid;
+ user_data->session_uid = info.session_uid;
- user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.add_user.event, info);
+ user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.event, info);
g_atomic_int_inc(&callback_adduserstarted_reference);
return 0;
if(cb_data == NULL) return -1;
user_data->user_id = info.remove_user.user;
- user_data->session_uid = info.remove_user.session_uid;
+ user_data->session_uid = info.session_uid;
user_data->callback_result = 0;
- user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.remove_user.event, info);
+ user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.event, info);
g_atomic_int_inc(&callback_remove_user_started_reference);
return 0;
int test_subsession_switch_user_completion_callback(subsession_event_info info, void *cb_data) {
test_user_data_cb_t *user_data = (test_user_data_cb_t *)cb_data;
- user_data->session_uid = info.switch_user.session_uid;
+ user_data->session_uid = info.session_uid;
user_data->switch_id = info.switch_user.switch_id;
user_data->user_id = info.switch_user.next_user;
user_data->prev_user_id = info.switch_user.prev_user;
test_user_data_cb_t *user_data = (test_user_data_cb_t *)cb_data;
- user_data->session_uid = info.switch_user.session_uid;
+ user_data->session_uid = info.session_uid;
user_data->switch_id = info.switch_user.switch_id;
user_data->user_id = info.switch_user.next_user;
user_data->prev_user_id = info.switch_user.prev_user;
- user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.switch_user.event, info);
+ user_data->callback_result = subsession_event_wait_done(test_subsession_uid, info.event, info);
if (user_data->user_id == TestUser::user_0 || user_data->user_id == TestUser::user_2) {
g_atomic_int_inc(&user_data->callback_reference);