From 2454cee32e06f395ca091e51ab724f30e9cb278b Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 2 Mar 2024 23:43:39 +0800 Subject: [PATCH 1/3] logind: place 'ret' param at last --- src/login/logind-core.c | 6 +++--- src/login/logind-seat.c | 4 ++-- src/login/logind-seat.h | 4 ++-- src/login/logind-session.c | 4 ++-- src/login/logind-session.h | 4 ++-- src/login/logind-user.c | 7 ++----- src/login/logind-user.h | 4 ++-- 7 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 582cbcbea8..40d09cd532 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -118,7 +118,7 @@ int manager_add_seat(Manager *m, const char *id, Seat **ret_seat) { s = hashmap_get(m->seats, id); if (!s) { - r = seat_new(&s, m, id); + r = seat_new(m, id, &s); if (r < 0) return r; } @@ -138,7 +138,7 @@ int manager_add_session(Manager *m, const char *id, Session **ret_session) { s = hashmap_get(m->sessions, id); if (!s) { - r = session_new(&s, m, id); + r = session_new(m, id, &s); if (r < 0) return r; } @@ -162,7 +162,7 @@ int manager_add_user( u = hashmap_get(m->users, UID_TO_PTR(ur->uid)); if (!u) { - r = user_new(&u, m, ur); + r = user_new(m, ur, &u); if (r < 0) return r; } diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index 8d875d2ea7..21f2c1ddd8 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -25,13 +25,13 @@ #include "terminal-util.h" #include "tmpfile-util.h" -int seat_new(Seat** ret, Manager *m, const char *id) { +int seat_new(Manager *m, const char *id, Seat **ret) { _cleanup_(seat_freep) Seat *s = NULL; int r; - assert(ret); assert(m); assert(id); + assert(ret); if (!seat_name_is_valid(id)) return -EINVAL; diff --git a/src/login/logind-seat.h b/src/login/logind-seat.h index 2d18e7595a..76a69e6517 100644 --- a/src/login/logind-seat.h +++ b/src/login/logind-seat.h @@ -26,10 +26,10 @@ struct Seat { LIST_FIELDS(Seat, gc_queue); }; -int seat_new(Seat **ret, Manager *m, const char *id); +int seat_new(Manager *m, const char *id, Seat **ret); Seat* seat_free(Seat *s); -DEFINE_TRIVIAL_CLEANUP_FUNC(Seat *, seat_free); +DEFINE_TRIVIAL_CLEANUP_FUNC(Seat*, seat_free); int seat_save(Seat *s); int seat_load(Seat *s); diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 787855a7b5..a0dc6265b7 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -46,13 +46,13 @@ static void session_remove_fifo(Session *s); static void session_restore_vt(Session *s); -int session_new(Session **ret, Manager *m, const char *id) { +int session_new(Manager *m, const char *id, Session **ret) { _cleanup_(session_freep) Session *s = NULL; int r; - assert(ret); assert(m); assert(id); + assert(ret); if (!session_id_valid(id)) return -EINVAL; diff --git a/src/login/logind-session.h b/src/login/logind-session.h index f344fb6a61..0b84e043fd 100644 --- a/src/login/logind-session.h +++ b/src/login/logind-session.h @@ -164,10 +164,10 @@ struct Session { LIST_FIELDS(Session, gc_queue); }; -int session_new(Session **ret, Manager *m, const char *id); +int session_new(Manager *m, const char *id, Session **ret); Session* session_free(Session *s); -DEFINE_TRIVIAL_CLEANUP_FUNC(Session *, session_free); +DEFINE_TRIVIAL_CLEANUP_FUNC(Session*, session_free); void session_set_user(Session *s, User *u); int session_set_leader_consume(Session *s, PidRef _leader); diff --git a/src/login/logind-user.c b/src/login/logind-user.c index a14c9b7cfb..537cc551cc 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -37,17 +37,14 @@ #include "unit-name.h" #include "user-util.h" -int user_new(User **ret, - Manager *m, - UserRecord *ur) { - +int user_new(Manager *m, UserRecord *ur, User **ret) { _cleanup_(user_freep) User *u = NULL; char lu[DECIMAL_STR_MAX(uid_t) + 1]; int r; - assert(ret); assert(m); assert(ur); + assert(ret); if (!ur->user_name) return -EINVAL; diff --git a/src/login/logind-user.h b/src/login/logind-user.h index 723b66d189..7b10c4fd60 100644 --- a/src/login/logind-user.h +++ b/src/login/logind-user.h @@ -65,10 +65,10 @@ struct User { LIST_FIELDS(User, gc_queue); }; -int user_new(User **out, Manager *m, UserRecord *ur); +int user_new(Manager *m, UserRecord *ur, User **ret); User *user_free(User *u); -DEFINE_TRIVIAL_CLEANUP_FUNC(User *, user_free); +DEFINE_TRIVIAL_CLEANUP_FUNC(User*, user_free); int user_start_service_manager(User *u); int user_start(User *u); From 7f9c0c29d0bba46754352b0c829f06ce6f767abf Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 2 Mar 2024 23:44:14 +0800 Subject: [PATCH 2/3] logind-device: remove unneeded 'struct' --- src/login/logind-device.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/login/logind-device.h b/src/login/logind-device.h index 0d89613d77..f96c4dbfb6 100644 --- a/src/login/logind-device.h +++ b/src/login/logind-device.h @@ -16,7 +16,7 @@ struct Device { dual_timestamp timestamp; - LIST_FIELDS(struct Device, devices); + LIST_FIELDS(Device, devices); LIST_HEAD(SessionDevice, session_devices); }; From c1f04b83c1c03ecc4f373fa05d5b1da7e65b89e9 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 2 Mar 2024 23:46:00 +0800 Subject: [PATCH 3/3] logind-{session,seat}: get rid of basename() in _new() --- src/login/logind-seat.c | 9 ++++----- src/login/logind-session.c | 17 ++++++++--------- src/login/logind-session.h | 3 ++- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index 21f2c1ddd8..bed1f7db03 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -42,14 +42,12 @@ int seat_new(Manager *m, const char *id, Seat **ret) { *s = (Seat) { .manager = m, + .id = strdup(id), + .state_file = path_join("/run/systemd/seats/", id), }; - - s->state_file = path_join("/run/systemd/seats", id); - if (!s->state_file) + if (!s->id || !s->state_file) return -ENOMEM; - s->id = basename(s->state_file); - r = hashmap_put(m->seats, s->id, s); if (r < 0) return r; @@ -77,6 +75,7 @@ Seat* seat_free(Seat *s) { free(s->positions); free(s->state_file); + free(s->id); return mfree(s); } diff --git a/src/login/logind-session.c b/src/login/logind-session.c index a0dc6265b7..2713215e10 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -63,19 +63,17 @@ int session_new(Manager *m, const char *id, Session **ret) { *s = (Session) { .manager = m, + .id = strdup(id), + .state_file = path_join("/run/systemd/sessions/", id), .fifo_fd = -EBADF, .vtfd = -EBADF, .audit_id = AUDIT_SESSION_INVALID, .tty_validity = _TTY_VALIDITY_INVALID, .leader = PIDREF_NULL, }; - - s->state_file = path_join("/run/systemd/sessions", id); - if (!s->state_file) + if (!s->id || !s->state_file) return -ENOMEM; - s->id = basename(s->state_file); - s->devices = hashmap_new(&devt_hash_ops); if (!s->devices) return -ENOMEM; @@ -146,10 +144,12 @@ Session* session_free(Session *s) { if (!s) return NULL; + sd_event_source_unref(s->stop_on_idle_event_source); + if (s->in_gc_queue) LIST_REMOVE(gc_queue, s->manager->session_gc_queue, s); - s->timer_event_source = sd_event_source_unref(s->timer_event_source); + sd_event_source_unref(s->timer_event_source); session_drop_controller(s); @@ -203,10 +203,9 @@ Session* session_free(Session *s) { /* Note that we remove neither the state file nor the fifo path here, since we want both to survive * daemon restarts */ - free(s->state_file); free(s->fifo_path); - - sd_event_source_unref(s->stop_on_idle_event_source); + free(s->state_file); + free(s->id); return mfree(s); } diff --git a/src/login/logind-session.h b/src/login/logind-session.h index 0b84e043fd..c187bcd779 100644 --- a/src/login/logind-session.h +++ b/src/login/logind-session.h @@ -95,7 +95,8 @@ typedef enum TTYValidity { struct Session { Manager *manager; - const char *id; + char *id; + unsigned position; SessionType type; SessionType original_type;