Full_Name: Rein Tollevik Version: CVS head OS: URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (81.93.160.250) Submitted by: rein We have seen a case where "assert(SLAP_SOCK_IS_ACTIVE(s))" in slapd_clr_write() failed, see the stack trace at the end. The last log message (at loglevel stat) related to the socket was "fd=657 closed (connection lost on write)". The comment where slapd_daemon_task() calls connection_write() makes me believe that slapd_clr_write() should not have use assert here. Remove it or include it as a condition in the following if statement? Rein Tollevik Basefarm AS Program terminated with signal 6, Aborted. (gdb) where #0 0xb7fe97a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 #1 0xb7b777a5 in raise () from /lib/tls/libc.so.6 #2 0xb7b79209 in abort () from /lib/tls/libc.so.6 #3 0xb7b70d91 in __assert_fail () from /lib/tls/libc.so.6 #4 0x0806da8f in slapd_clr_write (s=657, wake=0) at daemon.c:931 #5 0x080726d7 in connection_write (s=657) at connection.c:1814 #6 0x080717bc in slapd_daemon_task (ptr=0x0) at daemon.c:2414 #7 0xb7c80371 in start_thread () from /lib/tls/libpthread.so.0 #8 0xb7c17ffe in clone () from /lib/tls/libc.so.6
moved from Incoming to Software Bugs
rein@OpenLDAP.org wrote: > Full_Name: Rein Tollevik > Version: CVS head > OS: > URL: ftp://ftp.openldap.org/incoming/ > Submission from: (NULL) (81.93.160.250) > Submitted by: rein > > > We have seen a case where "assert(SLAP_SOCK_IS_ACTIVE(s))" in > slapd_clr_write() failed, see the stack trace at the end. The > last log message (at loglevel stat) related to the socket was > "fd=657 closed (connection lost on write)". The comment where > slapd_daemon_task() calls connection_write() makes me believe > that slapd_clr_write() should not have use assert here. Remove > it or include it as a condition in the following if statement? How frequently can you reproduce this? I'm tempted to say move the assert into the if (SLAP_SOCK_IS_WRITE()) block, and see if it still triggers. > > Rein Tollevik > Basefarm AS > > > Program terminated with signal 6, Aborted. > (gdb) where > #0 0xb7fe97a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 > #1 0xb7b777a5 in raise () from /lib/tls/libc.so.6 > #2 0xb7b79209 in abort () from /lib/tls/libc.so.6 > #3 0xb7b70d91 in __assert_fail () from /lib/tls/libc.so.6 > #4 0x0806da8f in slapd_clr_write (s=657, wake=0) at daemon.c:931 > #5 0x080726d7 in connection_write (s=657) at connection.c:1814 > #6 0x080717bc in slapd_daemon_task (ptr=0x0) at daemon.c:2414 > #7 0xb7c80371 in start_thread () from /lib/tls/libpthread.so.0 > #8 0xb7c17ffe in clone () from /lib/tls/libc.so.6 > > > -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/
On Wed, 30 Apr 2008, hyc@symas.com wrote: > rein@OpenLDAP.org wrote: >> We have seen a case where "assert(SLAP_SOCK_IS_ACTIVE(s))" in >> slapd_clr_write() failed, see the stack trace at the end. The >> last log message (at loglevel stat) related to the socket was >> "fd=657 closed (connection lost on write)". The comment where >> slapd_daemon_task() calls connection_write() makes me believe >> that slapd_clr_write() should not have use assert here. Remove >> it or include it as a condition in the following if statement? > > How frequently can you reproduce this? I'm tempted to say move the > assert into the if (SLAP_SOCK_IS_WRITE()) block, and see if it still > triggers. This is the only occurrence I have found of this abort, so it is not very reproduce able :-( But the core shows that SLAP_SOCK_IS_WRITE would be false (as would SLAP_SOCK_IS_READ), so moving the assert into the if block should fix this case. And asserting a writeable socket is also active makes sence to me. Rein
changed notes changed state Open to Test
changed notes changed state Test to Closed
changed notes
fixed in HEAD/RE24/RE23