static void session_remove_fifo(Session *s);
-static unsigned long devt_hash_func(const void *p, const uint8_t hash_key[HASH_KEY_SIZE]) {
- uint64_t u = *(const dev_t*)p;
-
- return uint64_hash_func(&u, hash_key);
-}
-
-static int devt_compare_func(const void *_a, const void *_b) {
- dev_t a, b;
-
- a = *(const dev_t*) _a;
- b = *(const dev_t*) _b;
-
- return a < b ? -1 : (a > b ? 1 : 0);
-}
-
Session* session_new(Manager *m, const char *id) {
Session *s;
static void session_swap_controller(Session *s, char *name) {
SessionDevice *sd;
+ char *c;
if (s->controller) {
- manager_drop_busname(s->manager, s->controller);
- free(s->controller);
+ c = s->controller;
s->controller = NULL;
+ manager_drop_busname(s->manager, c);
+ free(c);
/* Drop all devices as they're now unused. Do that after the
* controller is released to avoid sending out useles
* If logind crashes/restarts, we restore the controller during restart
* or reset the VT in case it crashed/exited, too. */
r = session_prepare_vt(s);
- if (r < 0)
+ if (r < 0) {
+ free(t);
return r;
+ }
session_swap_controller(s, t);