Recently, with 2.3.30, I got an assertion during shutdown because connection_close() was called with c_struct_state == SLAP_C_INACTIVE. Unfortunately I couldn't save neither the core nor a backtrace. I guess the fix in connection.c 1.375 -> 1.376 should be backported to re23, but the code changed since then, and I fear I could break something. Is this correct?
p.
Pierangelo Masarati wrote:
Recently, with 2.3.30, I got an assertion during shutdown because connection_close() was called with c_struct_state == SLAP_C_INACTIVE. Unfortunately I couldn't save neither the core nor a backtrace. I guess the fix in connection.c 1.375 -> 1.376 should be backported to re23, but the code changed since then, and I fear I could break something. Is this correct?
Pretty sure that change is already incorporated in 2.3.30's connection.c.
Pierangelo Masarati wrote:
Recently, with 2.3.30, I got an assertion during shutdown because connection_close() was called with c_struct_state == SLAP_C_INACTIVE. Unfortunately I couldn't save neither the core nor a backtrace. I guess the fix in connection.c 1.375 -> 1.376 should be backported to re23, but the code changed since then, and I fear I could break something. Is this correct?
Pretty sure that change is already incorporated in 2.3.30's connection.c.
OK, then hopefully we just mixed up versions while testing some custom code, and had no time to care about shutdown issues...
Thanks, p.
Howard Chu wrote:
Pierangelo Masarati wrote:
Recently, with 2.3.30, I got an assertion during shutdown because connection_close() was called with c_struct_state == SLAP_C_INACTIVE. Unfortunately I couldn't save neither the core nor a backtrace. I guess the fix in connection.c 1.375 -> 1.376 should be backported to re23, but the code changed since then, and I fear I could break something. Is this correct?
Pretty sure that change is already incorporated in 2.3.30's connection.c.
Here's something similar, although in a different place, happening on Solaris 9 with a hacked version of 2.3.30 (hacking is basically not in this file; I only imported fixes to ITS#4769 and ITS#4771) when I shut it down hitting CTRL-C.
bash-2.03$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/lwp/sparcv9/ LD_PRELOAD=/usr/lib/sparcv9/libmtmalloc.so.1:/home/sysnet/gprof-helper.so ./bin/slapd-sysnet-0.3.34-beta.2-gprof -f slapd.conf -h ldap://:9020 -s0 -d0 pthreads: using profiling hooks for gprof ^CAssertion failed: c->c_struct_state == SLAP_C_USED, file connection.c, line 811 Abort (core dumped)
Note: connection.c:811 corresponds to connection.c:809 in 2.3.30 code.
(gdb) bt #0 0x7fffffff7e7a754c in _lwp_kill () from /usr/lib/64/libc.so.1 #1 0x7fffffff7e753e7c in raise () from /usr/lib/64/libc.so.1 #2 0x7fffffff7e73d274 in abort () from /usr/lib/64/libc.so.1 #3 0x7fffffff7e73d56c in _assert () from /usr/lib/64/libc.so.1 #4 0x0000000100033834 in connection_closing (c=0x100eebb00, why=0x1001d0498 "slapd shutdown") at connection.c:811 #5 0x0000000100031c2c in connections_shutdown () at connection.c:212 #6 0x000000010002fd10 in slapd_daemon_task (ptr=0x100343b10) at daemon.c:2501 #7 0x7fffffff7f800d00 in wrapper_routine (data=0xffffffff7ffff768) at gprof-helper.c:81 #8 0x7fffffff7df17478 in _lwp_start () from /usr/lib/lwp/sparcv9//libthread.so.1 #9 0x7fffffff7df17478 in _lwp_start () from /usr/lib/lwp/sparcv9//libthread.so.1
What I see is that c->c_struct_state is 1 (SLAP_C_UNUSED) instead of 2 (SLAP_C_USED).
Any thoughts? I have access to the binary and the core (sort of: it's more than 2000 km apart on a not fast enough connection to download it, and the firewall will shut the connection down shortly...).
Apparently, connections_shutdown() should lock the connection's c_mutex before testing c_struct_state, and not after, right?
p.
Pierangelo Masarati wrote:
Here's something similar, although in a different place, happening on Solaris 9 with a hacked version of 2.3.30 (hacking is basically not in this file; I only imported fixes to ITS#4769 and ITS#4771) when I shut it down hitting CTRL-C.
What I see is that c->c_struct_state is 1 (SLAP_C_UNUSED) instead of 2 (SLAP_C_USED).
Any thoughts? I have access to the binary and the core (sort of: it's more than 2000 km apart on a not fast enough connection to download it, and the firewall will shut the connection down shortly...).
Apparently, connections_shutdown() should lock the connection's c_mutex before testing c_struct_state, and not after, right?
Sounds right. Oops.