core: rework socket/service GC logic

There's no need to set the no_gc bit for service units that socket units
prepare, as we always keep a proper reference (as maintained by unit_ref_set())
on them, and such references are honoured by the GC logic anyway. Moreover,
explicitly setting the no_gc bit is problematic if the socket gets GC'ed for a
reason, as the service might then leak with the bit set.
This commit is contained in:
Lennart Poettering 2016-04-29 11:14:03 +02:00
parent bb5049ae24
commit e4f673174e
1 changed files with 1 additions and 4 deletions

View File

@ -229,7 +229,6 @@ int socket_instantiate_service(Socket *s) {
if (r < 0)
return r;
u->no_gc = true;
unit_ref_set(&s->service, u);
return unit_add_two_dependencies(UNIT(s), UNIT_BEFORE, UNIT_TRIGGERS, u, false);
@ -1994,10 +1993,8 @@ static void socket_enter_running(Socket *s, int cfd) {
service = SERVICE(UNIT_DEREF(s->service));
unit_ref_unset(&s->service);
s->n_accepted++;
UNIT(service)->no_gc = false;
unit_choose_id(UNIT(service), name);
r = service_set_socket_fd(service, cfd, s, s->selinux_context_from_net);