diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-08-11 02:07:59 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-08-11 02:07:59 +0200 |
commit | 6c073082e7e3859cb6020db8c548325f342b7ba6 (patch) | |
tree | dfc968328216e659a66b89f06114f8bf5580b0cf | |
parent | 4927fcae48de061393b3ce9c12d49f80d73fbf1d (diff) |
socket: disable GC for pre-allocated per-connection service until it is used
-rw-r--r-- | src/socket.c | 3 | ||||
-rw-r--r-- | src/unit.c | 3 | ||||
-rw-r--r-- | src/unit.h | 2 |
3 files changed, 8 insertions, 0 deletions
diff --git a/src/socket.c b/src/socket.c index 7c280e0067..23658ac274 100644 --- a/src/socket.c +++ b/src/socket.c @@ -165,6 +165,7 @@ static int socket_instantiate_service(Socket *s) { if (r < 0) return r; + u->meta.no_gc = true; s->service = SERVICE(u); return 0; } @@ -1202,6 +1203,8 @@ static void socket_enter_running(Socket *s, int cfd) { s->service = NULL; s->n_accepted ++; + service->meta.no_gc = false; + unit_choose_id(UNIT(service), name); free(name); diff --git a/src/unit.c b/src/unit.c index 3c4bdec981..881f91a677 100644 --- a/src/unit.c +++ b/src/unit.c @@ -236,6 +236,9 @@ bool unit_check_gc(Unit *u) { if (UNIT_VTABLE(u)->no_gc) return true; + if (u->meta.no_gc) + return true; + if (u->meta.job) return true; diff --git a/src/unit.h b/src/unit.h index 1c97e158fc..00e929ac4e 100644 --- a/src/unit.h +++ b/src/unit.h @@ -208,6 +208,8 @@ struct Meta { bool in_gc_queue:1; bool sent_dbus_new_signal:1; + + bool no_gc:1; }; #include "service.h" |