chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove unused variables
[elogind.git]
/
src
/
login
/
logind.c
diff --git
a/src/login/logind.c
b/src/login/logind.c
index 47b306b6194df13e42c0ce097edc28f6982a8aeb..a6f84e85360cc172efd3aa017a77ec152c18c5aa 100644
(file)
--- a/
src/login/logind.c
+++ b/
src/login/logind.c
@@
-34,6
+34,7
@@
#include "bus-util.h"
#include "bus-error.h"
#include "logind.h"
#include "bus-util.h"
#include "bus-error.h"
#include "logind.h"
+#include "udev-util.h"
Manager *manager_new(void) {
Manager *m;
Manager *manager_new(void) {
Manager *m;
@@
-96,6
+97,8
@@
Manager *manager_new(void) {
return NULL;
}
return NULL;
}
+ sd_event_set_watchdog(m->event, true);
+
return m;
}
return m;
}
@@
-179,7
+182,7
@@
void manager_free(Manager *m) {
static int manager_enumerate_devices(Manager *m) {
struct udev_list_entry *item = NULL, *first = NULL;
static int manager_enumerate_devices(Manager *m) {
struct udev_list_entry *item = NULL, *first = NULL;
-
struct udev_enumerate *e
;
+
_cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL
;
int r;
assert(m);
int r;
assert(m);
@@
-188,47
+191,41
@@
static int manager_enumerate_devices(Manager *m) {
* necessary */
e = udev_enumerate_new(m->udev);
* necessary */
e = udev_enumerate_new(m->udev);
- if (!e) {
- r = -ENOMEM;
- goto finish;
- }
+ if (!e)
+ return -ENOMEM;
r = udev_enumerate_add_match_tag(e, "master-of-seat");
if (r < 0)
r = udev_enumerate_add_match_tag(e, "master-of-seat");
if (r < 0)
- goto finish;
+ return r;
+
+ r = udev_enumerate_add_match_is_initialized(e);
+ if (r < 0)
+ return r;
r = udev_enumerate_scan_devices(e);
if (r < 0)
r = udev_enumerate_scan_devices(e);
if (r < 0)
-
goto finish
;
+
return r
;
first = udev_enumerate_get_list_entry(e);
udev_list_entry_foreach(item, first) {
first = udev_enumerate_get_list_entry(e);
udev_list_entry_foreach(item, first) {
-
struct udev_device *d
;
+
_cleanup_udev_device_unref_ struct udev_device *d = NULL
;
int k;
d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item));
int k;
d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item));
- if (!d) {
- r = -ENOMEM;
- goto finish;
- }
+ if (!d)
+ return -ENOMEM;
k = manager_process_seat_device(m, d);
k = manager_process_seat_device(m, d);
- udev_device_unref(d);
-
if (k < 0)
r = k;
}
if (k < 0)
r = k;
}
-finish:
- if (e)
- udev_enumerate_unref(e);
-
return r;
}
static int manager_enumerate_buttons(Manager *m) {
return r;
}
static int manager_enumerate_buttons(Manager *m) {
+ _cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL;
struct udev_list_entry *item = NULL, *first = NULL;
struct udev_list_entry *item = NULL, *first = NULL;
- struct udev_enumerate *e;
int r;
assert(m);
int r;
assert(m);
@@
-242,45
+239,39
@@
static int manager_enumerate_buttons(Manager *m) {
return 0;
e = udev_enumerate_new(m->udev);
return 0;
e = udev_enumerate_new(m->udev);
- if (!e) {
- r = -ENOMEM;
- goto finish;
- }
+ if (!e)
+ return -ENOMEM;
r = udev_enumerate_add_match_subsystem(e, "input");
if (r < 0)
r = udev_enumerate_add_match_subsystem(e, "input");
if (r < 0)
-
goto finish
;
+
return r
;
r = udev_enumerate_add_match_tag(e, "power-switch");
if (r < 0)
r = udev_enumerate_add_match_tag(e, "power-switch");
if (r < 0)
- goto finish;
+ return r;
+
+ r = udev_enumerate_add_match_is_initialized(e);
+ if (r < 0)
+ return r;
r = udev_enumerate_scan_devices(e);
if (r < 0)
r = udev_enumerate_scan_devices(e);
if (r < 0)
-
goto finish
;
+
return r
;
first = udev_enumerate_get_list_entry(e);
udev_list_entry_foreach(item, first) {
first = udev_enumerate_get_list_entry(e);
udev_list_entry_foreach(item, first) {
-
struct udev_device *d
;
+
_cleanup_udev_device_unref_ struct udev_device *d = NULL
;
int k;
d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item));
int k;
d = udev_device_new_from_syspath(m->udev, udev_list_entry_get_name(item));
- if (!d) {
- r = -ENOMEM;
- goto finish;
- }
+ if (!d)
+ return -ENOMEM;
k = manager_process_button_device(m, d);
k = manager_process_button_device(m, d);
- udev_device_unref(d);
-
if (k < 0)
r = k;
}
if (k < 0)
r = k;
}
-finish:
- if (e)
- udev_enumerate_unref(e);
-
return r;
}
return r;
}
@@
-488,9
+479,8
@@
static int manager_enumerate_inhibitors(Manager *m) {
}
static int manager_dispatch_seat_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
}
static int manager_dispatch_seat_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+ _cleanup_udev_device_unref_ struct udev_device *d = NULL;
Manager *m = userdata;
Manager *m = userdata;
- struct udev_device *d;
- int r;
assert(m);
assert(m);
@@
-498,16
+488,13
@@
static int manager_dispatch_seat_udev(sd_event_source *s, int fd, uint32_t reven
if (!d)
return -ENOMEM;
if (!d)
return -ENOMEM;
- r = manager_process_seat_device(m, d);
- udev_device_unref(d);
-
- return r;
+ manager_process_seat_device(m, d);
+ return 0;
}
static int manager_dispatch_device_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
}
static int manager_dispatch_device_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+ _cleanup_udev_device_unref_ struct udev_device *d = NULL;
Manager *m = userdata;
Manager *m = userdata;
- struct udev_device *d;
- int r;
assert(m);
assert(m);
@@
-515,16
+502,13
@@
static int manager_dispatch_device_udev(sd_event_source *s, int fd, uint32_t rev
if (!d)
return -ENOMEM;
if (!d)
return -ENOMEM;
- r = manager_process_seat_device(m, d);
- udev_device_unref(d);
-
- return r;
+ manager_process_seat_device(m, d);
+ return 0;
}
static int manager_dispatch_vcsa_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
}
static int manager_dispatch_vcsa_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+ _cleanup_udev_device_unref_ struct udev_device *d = NULL;
Manager *m = userdata;
Manager *m = userdata;
- struct udev_device *d;
- int r = 0;
const char *name;
assert(m);
const char *name;
assert(m);
@@
-539,17
+523,14
@@
static int manager_dispatch_vcsa_udev(sd_event_source *s, int fd, uint32_t reven
* VTs, to make sure our auto VTs never go away. */
if (name && startswith(name, "vcsa") && streq_ptr(udev_device_get_action(d), "remove"))
* VTs, to make sure our auto VTs never go away. */
if (name && startswith(name, "vcsa") && streq_ptr(udev_device_get_action(d), "remove"))
- r = seat_preallocate_vts(m->seat0);
-
- udev_device_unref(d);
+ seat_preallocate_vts(m->seat0);
- return
r
;
+ return
0
;
}
static int manager_dispatch_button_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
}
static int manager_dispatch_button_udev(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+ _cleanup_udev_device_unref_ struct udev_device *d = NULL;
Manager *m = userdata;
Manager *m = userdata;
- struct udev_device *d;
- int r;
assert(m);
assert(m);
@@
-557,10
+538,8
@@
static int manager_dispatch_button_udev(sd_event_source *s, int fd, uint32_t rev
if (!d)
return -ENOMEM;
if (!d)
return -ENOMEM;
- r = manager_process_button_device(m, d);
- udev_device_unref(d);
-
- return r;
+ manager_process_button_device(m, d);
+ return 0;
}
static int manager_dispatch_console(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
}
static int manager_dispatch_console(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
@@
-571,7
+550,6
@@
static int manager_dispatch_console(sd_event_source *s, int fd, uint32_t revents
assert(m->console_active_fd == fd);
seat_read_active_vt(m->seat0);
assert(m->console_active_fd == fd);
seat_read_active_vt(m->seat0);
-
return 0;
}
return 0;
}
@@
-725,17
+703,12
@@
static int manager_connect_bus(Manager *m) {
return r;
}
return r;
}
- r = sd_bus_request_name(m->bus, "org.freedesktop.login1",
SD_BUS_NAME_DO_NOT_QUEUE
);
+ r = sd_bus_request_name(m->bus, "org.freedesktop.login1",
0
);
if (r < 0) {
log_error("Failed to register name: %s", strerror(-r));
return r;
}
if (r < 0) {
log_error("Failed to register name: %s", strerror(-r));
return r;
}
- if (r != SD_BUS_NAME_PRIMARY_OWNER) {
- log_error("Failed to acquire name.");
- return -EEXIST;
- }
-
r = sd_bus_attach_event(m->bus, m->event, 0);
if (r < 0) {
log_error("Failed to attach bus to event loop: %s", strerror(-r));
r = sd_bus_attach_event(m->bus, m->event, 0);
if (r < 0) {
log_error("Failed to attach bus to event loop: %s", strerror(-r));
@@
-898,8
+871,15
@@
void manager_gc(Manager *m, bool drop_not_started) {
LIST_REMOVE(gc_queue, m->session_gc_queue, session);
session->in_gc_queue = false;
LIST_REMOVE(gc_queue, m->session_gc_queue, session);
session->in_gc_queue = false;
- if (!session_check_gc(session, drop_not_started)) {
+ /* First, if we are not closing yet, initiate stopping */
+ if (!session_check_gc(session, drop_not_started) &&
+ session_get_state(session) != SESSION_CLOSING)
session_stop(session);
session_stop(session);
+
+ /* Normally, this should make the session busy again,
+ * if it doesn't then let's get rid of it
+ * immediately */
+ if (!session_check_gc(session, drop_not_started)) {
session_finalize(session);
session_free(session);
}
session_finalize(session);
session_free(session);
}
@@
-909,8
+889,11
@@
void manager_gc(Manager *m, bool drop_not_started) {
LIST_REMOVE(gc_queue, m->user_gc_queue, user);
user->in_gc_queue = false;
LIST_REMOVE(gc_queue, m->user_gc_queue, user);
user->in_gc_queue = false;
- if (!user_check_gc(user, drop_not_started)) {
+ if (!user_check_gc(user, drop_not_started) &&
+ user_get_state(user) != USER_CLOSING)
user_stop(user);
user_stop(user);
+
+ if (!user_check_gc(user, drop_not_started)) {
user_finalize(user);
user_free(user);
}
user_finalize(user);
user_free(user);
}