{ "org.tizen.sessiond.Error.IOError", SUBSESSION_ERROR_IO_ERROR },
{ "org.tizen.sessiond.Error.SubsessionAlreadyExists", SUBSESSION_ERROR_ALREADY_EXISTS },
{ "org.tizen.sessiond.Error.SubsessionDoesNotExist", SUBSESSION_ERROR_NOT_AVAILABLE },
+ { "org.tizen.sessiond.Error.UserIsActive", SUBSESSION_ERROR_RESOURCE_BUSY },
};
#ifdef __cplusplus
if (check_parameters_invalid(invocation, session_uid, subsession_id))
return;
+ int current_subsession_id = INITIAL_SUB_SESSION_ID;
+ if (last_subsession_per_session.contains(session_uid))
+ current_subsession_id = last_subsession_per_session.at(session_uid);
+ if (subsession_id == current_subsession_id) {
+ g_dbus_method_invocation_return_dbus_error(invocation,
+ sessiond_errors[SUBSESSION_ERROR_RESOURCE_BUSY].second.data(), "Cannot remove currently active user");
+ return;
+ }
+
GError *err = nullptr;
if (!g_dbus_connection_emit_signal(connection, nullptr, bus_object.data(), bus_iface.data(), "RemoveUserStarted",
vals_to_g_variant(session_uid, subsession_id), &err))
SUBSESSION_ERROR_IO_ERROR,
SUBSESSION_ERROR_ALREADY_EXISTS,
SUBSESSION_ERROR_DOES_NOT_EXIST,
+ SUBSESSION_ERROR_RESOURCE_BUSY,
};
constexpr static std::array sessiond_errors = {
std::make_pair(SUBSESSION_ERROR_IO_ERROR, "org.tizen.sessiond.Error.IOError"sv),
std::make_pair(SUBSESSION_ERROR_ALREADY_EXISTS, "org.tizen.sessiond.Error.SubsessionAlreadyExists"sv),
std::make_pair(SUBSESSION_ERROR_DOES_NOT_EXIST, "org.tizen.sessiond.Error.SubsessionDoesNotExist"sv),
+ std::make_pair(SUBSESSION_ERROR_RESOURCE_BUSY, "org.tizen.sessiond.Error.UserIsActive"sv),
};
// TODO: Currently, the first parameter is always a single-element tuple.