Hello, I have updated "0.9.53" to GIT - maybe a week ago. There is a recursive lock to "daemon->cleanup_connection_mutex"
------------ __owner=6065 holds the lock - but tries to lock again in "connection.c:2837" The callstack: "resume_suspended_connections()" at daemon.c:2908 "MHD_connection_handle_idle()" at connection.c:3344 "cleanup_connection()" at connection.c:2837 The mutex is locked in "daemon.c":"resume_suspended_connections()" - frame 5 The mutex is locked again in "connection.c":"cleanup_connection()" - frame 3 ------------ (gdb) thread apply all bt Thread 4 (Thread 0x7f4166ef8700 (LWP 6065)): #0 __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:136 #1 0x0000003c0c0095d8 in _L_lock_854 () from /lib64/libpthread.so.0 #2 0x0000003c0c0094a7 in __pthread_mutex_lock (mutex=0x36e4868) at pthread_mutex_lock.c:61 #3 0x00000000004998c4 in cleanup_connection (connection=0x7f4158000e50) at /.../microhttpd/connection.c:2837 #4 0x000000000049b830 in MHD_connection_handle_idle (connection=0x7f4158000e50) at /.../microhttpd/connection.c:3344 #5 0x000000000049e659 in resume_suspended_connections (daemon=0x36e4720) at /.../microhttpd/daemon.c:2908 #6 0x00000000004a404c in MHD_epoll (daemon=0x36e4720, may_block=1) at /.../microhttpd/daemon.c:4238 #7 0x00000000004a4825 in MHD_select_thread (cls=0x36e4720) at /.../microhttpd/daemon.c:4542 #8 0x0000003c0c007aa1 in start_thread (arg=0x7f4166ef8700) at pthread_create.c:301 #9 0x0000003c0bce8bcd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 Thread 2 (Thread 0x7f41417fb700 (LWP 22899)): #0 __lll_lock_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:136 #1 0x0000003c0c0095d8 in _L_lock_854 () from /lib64/libpthread.so.0 #2 0x0000003c0c0094a7 in __pthread_mutex_lock (mutex=0x36e4868) at pthread_mutex_lock.c:61 #3 0x000000000049eb16 in MHD_resume_connection (connection=0x7f41580015e0) at /.../microhttpd/daemon.c:2808 [snip: processes request] Thread 1 (Thread 0x7f41aeef68a0 (LWP 6058)): [snip: main() thread] ------------ (gdb) thread 2 (gdb) frame 3 (gdb) p daemon->cleanup_connection_mutex $2 = {__data = {__lock = 2, __count = 0, __owner = 6065, __nusers = 1, __kind = 0, __spins = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = "\002\000\000\000\000\000\000\000\261\027\000\000\001", '\000' <repeats 26 times>, __align = 2} ------------ (gdb) thread 4 (gdb) frame 3 (gdb) p daemon->cleanup_connection_mutex $3 = {__data = {__lock = 2, __count = 0, __owner = 6065, __nusers = 1, __kind = 0, __spins = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = "\002\000\000\000\000\000\000\000\261\027\000\000\001", '\000' <repeats 26 times>, __align = 2}