[systemd-devel] systemd freezes after rshd execution, if network connection is down
Jimmy Assarsson
jimmy.assarsson at axis.com
Thu May 15 01:40:48 PDT 2014
Now I've tested it, and it fixed the problem :)
Thanks,
Jimmy
On Tue, May 13, 2014 at 11:31 PM, Zbigniew Jędrzejewski-Szmek
<zbyszek at in.waw.pl> wrote:
> 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