hello,

I'm trying to reload haproxy, but the new process failed to start with a
segmentation fault. Fortunately, the old process is still here so no
downtime occurs (just that the config is not reloaded).

I'm using version 1.6.5 (did not update due to the SSL bug, and as I'm
using CentOS+ DH keys, I wanted to wait for the fix in 1.6.7). i'll try to
reproduce it with 1.6.7 on monday (no update on friday, that's the rule !).

I think this is related to the usage of server-state-file.
I have at least one server DOWN in this file.

Emptying server-state-file file and reloading HAProxy makes it work
correctly.

Unfortunately, config file is very huge and cannot be produced here. Main
informations :
 nbcores 7
 server-state-file /tmp/haproxy_server_state

HAProxy -vv output:
HA-Proxy version 1.6.5 2016/05/10
Copyright 2000-2016 Willy Tarreau <wi...@haproxy.org>

Build options :
  TARGET  = linux2628
  CPU     = native
  CC      = gcc
  CFLAGS  = -O2 -march=native -g -fno-strict-aliasing
-Wdeclaration-after-statement
  OPTIONS = USE_OPENSSL=1 USE_PCRE=1 USE_TFO=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200

Encrypted password support via crypt(3): yes
Built without compression support (neither USE_ZLIB nor USE_SLZ are set)
Compression algorithms supported : identity("identity")
Built with OpenSSL version : OpenSSL 1.0.2h  3 May 2016
Running on OpenSSL version : OpenSSL 1.0.2h  3 May 2016
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 7.2 2007-06-19
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built without Lua support
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT
IP_FREEBIND

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.




As I am using nbcores > 1, the server state file is built like this :
    > /tmp/haproxy_server_state
    for i in $(/bin/ls /var/run/haproxy-*.sock); do
        socat $i - <<< "show servers state" >> /tmp/haproxy_server_state
    done

gdb infos :

Program terminated with signal 11, Segmentation fault.
#0  srv_set_running () at include/proto/task.h:244
#1  0x000000000042ee3a in apply_server_state () at src/server.c:2069
#2  0x0000000000405618 in init () at src/haproxy.c:839
#3  0x0000000000407049 in main () at src/haproxy.c:1635

bt full gives this :

#0  srv_set_running () at include/proto/task.h:244
        srv_keywords = {scope = 0x0, list = {n = 0x8b1258, p = 0x8b90e8},
kw = 0x8b12a0}
        srv_kws = {scope = 0x6074f2 "ALL", list = {n = 0x8b4d68, p =
0x8b12a8}, kw = 0x8b1250}
#1  0x000000000042ee3a in apply_server_state () at src/server.c:2069
        srv_keywords = {scope = 0x0, list = {n = 0x8b1258, p = 0x8b90e8},
kw = 0x8b12a0}
        srv_kws = {scope = 0x6074f2 "ALL", list = {n = 0x8b4d68, p =
0x8b12a8}, kw = 0x8b1250}
#2  0x0000000000405618 in init () at src/haproxy.c:839
        [...]
        trash = {
          str = 0x23b1910 "Server OBFUSCATED:80/OBFUSCATED is DOWN, changed
from server-state after a reload. 1 active and 0 backup servers left. 0
sessions active, 0 requeued, 0 remaining in queue", size = 16384, len = 168}
        [...]

I can provide for the coredump in private with my haproxy binary if it
helps.

Reply via email to