Hi List, Thierry, Olivier,

Using a lua-socket with connect_ssl and haproxy running with nbthread 3.. results in haproxy hanging with 3 threads for me.

This while using both 1.9-7/30 version (with the 2 extra patches from Olivier avoiding 100% on a single thread.) and also a build of today's snapshot: HA-Proxy version 1.9-dev1-e3faf02 2018/08/25

Below info is at the bottom of the mail:
- haproxy -vv
- gdb backtraces

This one is easy to reproduce after just a few calls to the lua function with the lua code i'm writing on a test-box.. So if a 'simple' config that makes a reproduction is desired i can likely come up with one.
Same lua code with nbthread 1 seems to work properly.

Is below info (the stack traces) enough to come up with a fix? If not lemme know and ill try and make a small reproduction of it.


root@freebsd11:~ # haproxy -vv
HA-Proxy version 1.9-dev1-e3faf02 2018/08/25
Copyright 2000-2018 Willy Tarreau <wi...@haproxy.org>

Build options :
  TARGET  = freebsd
  CPU     = generic
  CC      = cc
  CFLAGS  = -DDEBUG_THREAD -DDEBUG_MEMORY -pipe -g -fstack-protector -fno-strict-aliasing -fno-strict-aliasing -Wdeclaration-after-statement -fwrapv -fno-strict-overflow -Wno-address-of-packed-member -Wno-null-dereference -Wno-unused-label -DFREEBSD_PORTS -DFREEBSD_PORTS   OPTIONS = USE_GETADDRINFO=1 USE_ZLIB=1 USE_CPU_AFFINITY=1 USE_ACCEPT4=1 USE_REGPARM=1 USE_OPENSSL=1 USE_LUA=1 USE_STATIC_PCRE=1 USE_PCRE_JIT=1

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

Built with network namespace support.
Built with zlib version : 1.2.11
Running on zlib version : 1.2.11
Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with PCRE version : 8.40 2017-01-11
Running on PCRE version : 8.40 2017-01-11
PCRE library supports JIT : yes
Built with multi-threading support.
Encrypted password support via crypt(3): yes
Built with transparent proxy support using: IP_BINDANY IPV6_BINDANY
Built with Lua version : Lua 5.3.4
Built with OpenSSL version : OpenSSL 1.0.2k-freebsd  26 Jan 2017
Running on OpenSSL version : OpenSSL 1.0.2k-freebsd  26 Jan 2017
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : SSLv3 TLSv1.0 TLSv1.1 TLSv1.2

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

Available multiplexer protocols :
(protocols markes as <default> cannot be specified using 'proto' keyword)
       <default> : mode=TCP|HTTP   side=FE|BE
              h2 : mode=HTTP       side=FE

Available filters :
        [TRACE] trace
        [COMP] compression
        [SPOE] spoe

root@freebsd11:~ # /usr/local/bin/gdb81 --pid 39649
GNU gdb (GDB) 8.1 [GDB v8.1 for FreeBSD]
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-portbld-freebsd11.1".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
Attaching to process 39649
Reading symbols from /usr/local/sbin/haproxy...done.
[New LWP 101651 of process 39649]
[New LWP 101652 of process 39649]
Reading symbols from /lib/libcrypt.so.5...(no debugging symbols found)...done.
Reading symbols from /lib/libz.so.6...(no debugging symbols found)...done.
Reading symbols from /lib/libthr.so.3...(no debugging symbols found)...done.
Reading symbols from /usr/lib/libssl.so.8...(no debugging symbols found)...done. Reading symbols from /lib/libcrypto.so.8...(no debugging symbols found)...done. Reading symbols from /usr/local/lib/liblua-5.3.so...(no debugging symbols found)...done.
Reading symbols from /lib/libm.so.5...(no debugging symbols found)...done.
Reading symbols from /lib/libc.so.7...(no debugging symbols found)...done.
Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...done.
[Switching to LWP 101650 of process 39649]
0x0000000801e11e3a in _kevent () from /lib/libc.so.7
(gdb) info thread
  Id   Target Id         Frame
* 1    LWP 101650 of process 39649 0x0000000801e11e3a in _kevent () from /lib/libc.so.7   2    LWP 101651 of process 39649 0x0000000000437b92 in __spin_lock (lbl=LUA_LOCK, l=0x8cf1d8 <hlua_global_lock>, func=0x62a781 "hlua_ctx_resume",     file=0x62a328 "src/hlua.c", line=1070) at include/common/hathreads.h:731   3    LWP 101652 of process 39649 0x000000080187a70c in ?? () from /usr/local/lib/liblua-5.3.so
(gdb) bt full
#0  0x0000000801e11e3a in _kevent () from /lib/libc.so.7
No symbol table info available.
#1  0x0000000800f15ca2 in ?? () from /lib/libthr.so.3
No symbol table info available.
#2  0x000000000041dc4a in _do_poll (p=0x8d0548 <cur_poller>, exp=1923638009) at src/ev_kqueue.c:151
        status = 37937304
        count = 1923638009
        fd = 200
        delta_ms = 1000
        timeout = {tv_sec = 1, tv_nsec = 0}
        updt_idx = 0
        changes = 0
        old_fd = -1
#3  0x000000000051a975 in run_poll_loop () at src/haproxy.c:2419
        next = 1923638009
        exp = 1923638009
#4  0x0000000000517672 in run_thread_poll_loop (data=0x8024849f0) at src/haproxy.c:2451         start_lock = {lock = 0, info = {owner = 0, waiters = 0, last_location = {function = 0x0, file = 0x0, line = 0}}}
        ptif = 0x8c1980 <per_thread_init_list>
        ptdf = 0x800f1841e <pthread_sigmask+46>
#5  0x000000000051423e in main (argc=3, argv=0x7fffffffeb28) at src/haproxy.c:3053
        tids = 0x8024849f0
        threads = 0x802510ac0
        i = 3
        old_sig = {__bits = {1073741824, 0, 0, 0}}
        blocked_sig = {__bits = {4227856759, 4294967295, 4294967295, 4294967295}}
        err = 0
        retry = 200
        limit = {rlim_cur = 4033, rlim_max = 4033}
        errmsg = "\000\353\377\377\377\177\000\000H\353\377\377\377\177\000\000(\353\377\377\377\177\000\000\003\000\000\000\000\000\000\000\063\207Z\306\357O5\347\240\211\214\000\000\000\000\000 \353\377\377\377\177\000\000H\353\377\377\377\177\000\000(\353\377\377\377\177\000\000\003\000\000\000\000\000\000\000\300\352\377\377\377\177\000\000R\201\340\001\b\000\000\000\001\000\000"
        pidfd = -1
(gdb) thread 2
[Switching to thread 2 (LWP 101651 of process 39649)]
#0  0x0000000000437b92 in __spin_lock (lbl=LUA_LOCK, l=0x8cf1d8 <hlua_global_lock>, func=0x62a781 "hlua_ctx_resume", file=0x62a328 "src/hlua.c", line=1070)
    at include/common/hathreads.h:731
731             __SPIN_LOCK(&l->lock);
(gdb) bt full
#0  0x0000000000437b92 in __spin_lock (lbl=LUA_LOCK, l=0x8cf1d8 <hlua_global_lock>, func=0x62a781 "hlua_ctx_resume", file=0x62a328 "src/hlua.c", line=1070)
    at include/common/hathreads.h:731
        __pl_l = 0x8cf1d8 <hlua_global_lock>
        __pl_r = 4294967300
        start_time = 7797095086642562
#1  0x0000000000438a5e in hlua_ctx_resume (lua=0x8024f4500, yield_allowed=1) at src/hlua.c:1070
        ret = 9240032
        msg = 0x456171 <eb32sc_next_with_parent+97> "H\203\370"
        trace = 0x7fffdfffdcb0 ""
#2  0x000000000044236d in hlua_process_task (task=0x80242d960, context=0x8024f4500, state=513) at src/hlua.c:5641
        hlua = 0x8024f4500
        status = HLUA_E_OK
#3  0x00000000005a49a6 in process_runnable_tasks () at src/task.c:384
        t = 0x80242d960
        state = 513
        ctx = 0x8024f4500
        process = 0x4422f0 <hlua_process_task>
        t = 0x80242df00
        max_processed = 200
#4  0x000000000051a6b2 in run_poll_loop () at src/haproxy.c:2386
        next = 1923609561
        exp = 1923608777
#5  0x0000000000517672 in run_thread_poll_loop (data=0x8024849f4) at src/haproxy.c:2451         start_lock = {lock = 0, info = {owner = 0, waiters = 0, last_location = {function = 0x0, file = 0x0, line = 0}}}
        ptif = 0x8c1980 <per_thread_init_list>
        ptdf = 0x800f177cc
#6  0x0000000800f12bc5 in ?? () from /lib/libthr.so.3
No symbol table info available.
#7  0x0000000000000000 in ?? ()
No symbol table info available.
Backtrace stopped: Cannot access memory at address 0x7fffdfffe000
(gdb) thread 3
[Switching to thread 3 (LWP 101652 of process 39649)]
#0  0x000000080187a70c in ?? () from /usr/local/lib/liblua-5.3.so
(gdb) bt full
#0  0x000000080187a70c in ?? () from /usr/local/lib/liblua-5.3.so
No symbol table info available.
#1  0x000000080187acd7 in ?? () from /usr/local/lib/liblua-5.3.so
No symbol table info available.
#2  0x000000080187b108 in ?? () from /usr/local/lib/liblua-5.3.so
No symbol table info available.
#3  0x0000000801873e30 in lua_gc () from /usr/local/lib/liblua-5.3.so
No symbol table info available.
#4  0x0000000000438e45 in hlua_ctx_resume (lua=0x8024f4f80, yield_allowed=1) at src/hlua.c:1186
        ret = 0
        msg = 0x5a8a24 <b_alloc_margin+324> "\351\200"
        trace = 0x7fffdfdfcc60 "\240\314\337\337\377\177"
#5  0x000000000044887a in hlua_applet_http_fct (ctx=0x8024c5880) at src/hlua.c:6716
        si = 0x802419540
        strm = 0x802419200
        res = 0x802419270
        rule = 0x80242e360
        px = 0x802512c00
        hlua = 0x8024f4f80
        blk1 = 0x7fffdfdfcca0 ""
        len1 = 34397588737
        blk2 = 0x802419278 ""
        len2 = 34397590136
        ret = 0
#6  0x00000000005a78a7 in task_run_applet (t=0x80242efe0, context=0x8024c5880, state=16385) at src/applet.c:49
        app = 0x8024c5880
        si = 0x802419540
#7  0x00000000005a49a6 in process_runnable_tasks () at src/task.c:384
        t = 0x80242efe0
        state = 16385
        ctx = 0x8024c5880
        process = 0x5a77f0 <task_run_applet>
        t = 0x80242efe0
        max_processed = 200
#8  0x000000000051a6b2 in run_poll_loop () at src/haproxy.c:2386
        next = 1923608730
        exp = 1923608070
#9  0x0000000000517672 in run_thread_poll_loop (data=0x8024849f8) at src/haproxy.c:2451         start_lock = {lock = 0, info = {owner = 0, waiters = 0, last_location = {function = 0x0, file = 0x0, line = 0}}}
        ptif = 0x8c1980 <per_thread_init_list>
        ptdf = 0x800f177cc
---Type <return> to continue, or q <return> to quit---
#10 0x0000000800f12bc5 in ?? () from /lib/libthr.so.3
No symbol table info available.
#11 0x0000000000000000 in ?? ()
No symbol table info available.
Backtrace stopped: Cannot access memory at address 0x7fffdfdfd000
(gdb)


Reply via email to