[systemd-devel] systemd freezes after rshd execution, if network connection is down
Zbigniew Jędrzejewski-Szmek
zbyszek at in.waw.pl
Tue May 13 14:31:49 PDT 2014
On Tue, May 13, 2014 at 07:40:53PM +0200, Umut Tezduyar Lindskog wrote:
> It is also reproducible by just loosing the carrier on the link. Maybe new
> async close is a candidate to solve it.
>
> On Tuesday, April 29, 2014, Harald Hoyer <harald.hoyer at gmail.com> wrote:
>
> > Am 28.04.2014 13:33, schrieb Jimmy Assarsson:
> > > Hi,
> > >
> > > We stumbled upon a freeze/block in systemd.
> > > The problem occurs when a rshd (socket activated) execution is
> > completed, the network connection is down and systemd is closing the socket.
> > > This causes a long (60 seconds) freeze where it's not possible to
> > communicate with systemd.
> > > Do you have any idea on what is causing this or how we can investigate
> > this further?
Can you check if this patch fixes the problem:
-----------------&<---------------------------------------------
Subject: [PATCH] core: close socket fds asynchronously
http://lists.freedesktop.org/archives/systemd-devel/2014-April/018928.html
---
src/core/service.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/core/service.c b/src/core/service.c
index 694a265..7461ec3 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -27,6 +27,7 @@
#include <linux/reboot.h>
#include <sys/syscall.h>
+#include "async.h"
#include "manager.h"
#include "unit.h"
#include "service.h"
@@ -222,7 +223,7 @@ static void service_close_socket_fd(Service *s) {
if (s->socket_fd < 0)
return;
- s->socket_fd = safe_close(s->socket_fd);
+ s->socket_fd = asynchronous_close(s->socket_fd);
}
static void service_connection_unref(Service *s) {
@@ -2705,7 +2706,7 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
else {
- safe_close(s->socket_fd);
+ asynchronous_close(s->socket_fd);
s->socket_fd = fdset_remove(fds, fd);
}
} else if (streq(key, "main-exec-status-pid")) {
--
1.9.0
----------------->&---------------------------------------------
Thanks,
Zbyszek
More information about the systemd-devel
mailing list