Yes, it seems fixed with this patch :) Another bug with git, is the "type=" in systemd is switched from "simple" to "notify". The later does not work and reverting to "simple" does work On 2021-04-25 17:53, Aki Tuomi wrote:>> On 24/04/2021 21:56 Joan Moreau <jom at grosjo.net> wrote: >> >> chroot= does not resolve the issue >> I have "chroot = login" in my conf > > Thanks! > > The chroot was needed to get the core dump. > > Can you try if this does fix the crash? > > Aki > > From 1df4e02cbff710ce8938480b07a5690e37f661f6 Mon Sep 17 00:00:00 2001 > From: Timo Sirainen <timo.sirainen at open-xchange.com> > Date: Fri, 23 Apr 2021 16:43:36 +0300 > Subject: [PATCH] login-common: Fix handling destroyed_clients linked > list > > The client needs to be removed from destroyed_clients linked list > before > it's added to client_fd_proxies linked list. > > Broken by 1c622cdbe08df2f642e28923c39894516143ae2a > --- > src/login-common/client-common.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/src/login-common/client-common.c > b/src/login-common/client-common.c > index bdb6e9c798..1d264d9f75 100644 > --- a/src/login-common/client-common.c > +++ b/src/login-common/client-common.c > @@ -289,8 +289,9 @@ void client_disconnect(struct client *client, const > char *reason, > /* Login was successful. We may now be proxying the connection, > so don't disconnect the client until client_unref(). */ > if (client->iostream_fd_proxy != NULL) { > + i_assert(!client->fd_proxying); > client->fd_proxying = TRUE; > - i_assert(client->prev == NULL && client->next == NULL); > + DLLIST_REMOVE(&destroyed_clients, client); > DLLIST_PREPEND(&client_fd_proxies, client); > client_fd_proxies_count++; > } > @@ -307,8 +308,9 @@ void client_destroy(struct client *client, const > char *reason) > > if (last_client == client) > last_client = client->prev; > - /* remove from clients linked list before it's added to > - client_fd_proxies. */ > + /* move to destroyed_clients linked list before it's potentially > + added to client_fd_proxies. */ > + i_assert(!client->fd_proxying); > DLLIST_REMOVE(&clients, client); > DLLIST_PREPEND(&destroyed_clients, client); > > @@ -409,13 +411,14 @@ bool client_unref(struct client **_client) > DLLIST_REMOVE(&client_fd_proxies, client); > i_assert(client_fd_proxies_count > 0); > client_fd_proxies_count--; > + } else { > + DLLIST_REMOVE(&destroyed_clients, client); > } > i_stream_unref(&client->input); > o_stream_unref(&client->output); > i_close_fd(&client->fd); > event_unref(&client->event); > > - DLLIST_REMOVE(&destroyed_clients, client); > i_free(client->proxy_user); > i_free(client->proxy_master_user); > i_free(client->virtual_user);-------------- next part -------------- An HTML attachment was scrubbed... URL: <https://dovecot.org/pipermail/dovecot/attachments/20210425/5be5cb4f/attachment.html>
This is because you are not compiling with libsystemd-dev installed. I guess we need to make some service template that use type simple when you don't use libsystemd. Aki> On 25/04/2021 22:53 Joan Moreau <jom at grosjo.net> wrote: > > > Yes, it seems fixed with this patch :) > > Another bug with git, is the "type=" in systemd is switched from "simple" to "notify". The later does not work and reverting to "simple" does work > > > On 2021-04-25 17:53, Aki Tuomi wrote: > > > On 24/04/2021 21:56 Joan Moreau <jom at grosjo.net> wrote: > > > > > > > > > chroot= does not resolve the issue > > > I have "chroot = login" in my conf > > > > > > > Thanks! > > > > The chroot was needed to get the core dump. > > > > Can you try if this does fix the crash? > > > > Aki > > > > From 1df4e02cbff710ce8938480b07a5690e37f661f6 Mon Sep 17 00:00:00 2001 > > From: Timo Sirainen <timo.sirainen at open-xchange.com> > > Date: Fri, 23 Apr 2021 16:43:36 +0300 > > Subject: [PATCH] login-common: Fix handling destroyed_clients linked list > > > > The client needs to be removed from destroyed_clients linked list before > > it's added to client_fd_proxies linked list. > > > > Broken by 1c622cdbe08df2f642e28923c39894516143ae2a > > --- > > ?src/login-common/client-common.c | 11 +++++++---- > > ?1 file changed, 7 insertions(+), 4 deletions(-) > > > > diff --git a/src/login-common/client-common.c b/src/login-common/client-common.c > > index bdb6e9c798..1d264d9f75 100644 > > --- a/src/login-common/client-common.c > > +++ b/src/login-common/client-common.c > > @@ -289,8 +289,9 @@ void client_disconnect(struct client *client, const char *reason, > > /* Login was successful. We may now be proxying the connection, > > so don't disconnect the client until client_unref(). */ > > if (client->iostream_fd_proxy != NULL) { > > + i_assert(!client->fd_proxying); > > client->fd_proxying = TRUE; > > - i_assert(client->prev == NULL && client->next == NULL); > > + DLLIST_REMOVE(&destroyed_clients, client); > > DLLIST_PREPEND(&client_fd_proxies, client); > > client_fd_proxies_count++; > > } > > @@ -307,8 +308,9 @@ void client_destroy(struct client *client, const char *reason) > > ? > > if (last_client == client) > > last_client = client->prev; > > - /* remove from clients linked list before it's added to > > - client_fd_proxies. */ > > + /* move to destroyed_clients linked list before it's potentially > > + added to client_fd_proxies. */ > > + i_assert(!client->fd_proxying); > > DLLIST_REMOVE(&clients, client); > > DLLIST_PREPEND(&destroyed_clients, client); > > ? > > @@ -409,13 +411,14 @@ bool client_unref(struct client **_client) > > DLLIST_REMOVE(&client_fd_proxies, client); > > i_assert(client_fd_proxies_count > 0); > > client_fd_proxies_count--; > > + } else { > > + DLLIST_REMOVE(&destroyed_clients, client); > > } > > i_stream_unref(&client->input); > > o_stream_unref(&client->output); > > i_close_fd(&client->fd); > > event_unref(&client->event); > > ? > > - DLLIST_REMOVE(&destroyed_clients, client); > > i_free(client->proxy_user); > > i_free(client->proxy_master_user); > > i_free(client->virtual_user);