service: Continue shutdown on socket activated unit on termination (#4108)
ENOTCONN may be a legitimate return code if the endpoint disappeared, but the service should still attempt to shutdown cleanly.
This commit is contained in:
committed by
Evgeny Vereshchagin
parent
de737be0a8
commit
f2dbd059a6
+10
-3
@@ -1256,10 +1256,17 @@ static int service_spawn(
|
||||
socklen_t salen = sizeof(sa);
|
||||
|
||||
r = getpeername(s->socket_fd, &sa.sa, &salen);
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
if (r < 0) {
|
||||
r = -errno;
|
||||
|
||||
if (IN_SET(sa.sa.sa_family, AF_INET, AF_INET6)) {
|
||||
/* ENOTCONN is legitimate if the endpoint disappeared on shutdown.
|
||||
* This connection is over, but the socket unit lives on. */
|
||||
if (r != -ENOTCONN ||
|
||||
(c != s->exec_command[SERVICE_EXEC_STOP] && c != s->exec_command[SERVICE_EXEC_STOP_POST]))
|
||||
return r;
|
||||
}
|
||||
|
||||
if (r == 0 && IN_SET(sa.sa.sa_family, AF_INET, AF_INET6)) {
|
||||
_cleanup_free_ char *addr = NULL;
|
||||
char *t;
|
||||
int port;
|
||||
|
||||
Reference in New Issue
Block a user