On Thu, Apr 13, 2017 at 04:59:26PM +0200, Conrad Hoffmann wrote: > Sure, here it is ;P > > I now get a segfault (on reload): > > *** Error in `/usr/sbin/haproxy': corrupted double-linked list: > 0x0000000005b511e0 *** > > Here is the backtrace, retrieved from the core file: > > (gdb) bt > #0 0x00007f4c92801067 in __GI_raise (sig=sig@entry=6) at > ../nptl/sysdeps/unix/sysv/linux/raise.c:56 > #1 0x00007f4c92802448 in __GI_abort () at abort.c:89 > #2 0x00007f4c9283f1b4 in __libc_message (do_abort=do_abort@entry=1, > fmt=fmt@entry=0x7f4c92934210 "*** Error in `%s': %s: 0x%s ***\n") at > ../sysdeps/posix/libc_fatal.c:175 > #3 0x00007f4c9284498e in malloc_printerr (action=1, str=0x7f4c929302ec > "corrupted double-linked list", ptr=<optimized out>) at malloc.c:4996 > #4 0x00007f4c92845923 in _int_free (av=0x7f4c92b71620 <main_arena>, > p=<optimized out>, have_lock=0) at malloc.c:3996 > #5 0x0000000000485850 in tcp_find_compatible_fd (l=0xaaed20) at > src/proto_tcp.c:812 > #6 tcp_bind_listener (listener=0xaaed20, errmsg=0x7ffccc774e10 "", > errlen=100) at src/proto_tcp.c:878 > #7 0x0000000000493ce1 in start_proxies (verbose=0) at src/proxy.c:793 > #8 0x00000000004091ec in main (argc=21, argv=0x7ffccc775168) at > src/haproxy.c:1942
Ok, yet another stupid mistake, hopefully the attached patch fixes this :) Thanks ! Olivier
>From 7c7fe0c00129d60617cba786cbec7bbdd9ce08f8 Mon Sep 17 00:00:00 2001 From: Olivier Houchard <ohouch...@haproxy.com> Date: Thu, 13 Apr 2017 17:06:53 +0200 Subject: [PATCH 12/12] BUG/MINOR: Properly remove the xfer_sock from the linked list. Doubly linked list are hard to get right. --- src/proto_tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proto_tcp.c b/src/proto_tcp.c index f558f00..57d6fc1 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -806,7 +806,7 @@ static int tcp_find_compatible_fd(struct listener *l) if (xfer_sock->prev) xfer_sock->prev->next = xfer_sock->next; if (xfer_sock->next) - xfer_sock->next->prev = xfer_sock->next->prev; + xfer_sock->next->prev = xfer_sock->prev; free(xfer_sock->iface); free(xfer_sock->namespace); free(xfer_sock); -- 2.9.3