[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#3672) Odd behavior of back meta when tortured by concurrency test



Full_Name: Pierangelo Masarati
Version: HEAD
OS: Linux RH 7.3 (might be part of the issue)
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (131.175.154.56)
Submitted by: ando


I've just implemented test036 which mimics test008-concurrency passing thru
back-meta.  Everything seems to go fine but... all testers but slapd-read run
fine without problems; (most of) the instances of slapd-read hang at some point.
 Note that they don't do anything much different than slapd-search, which
actually do search the entire tree; the concurrent writes also seem to go just
fine.  Only slapd-read just don't get it.  The saem occurs if I concurrently run
many slapd-tester manually, and in selected cases I was able to make it hang
even with a single instance of slapd-read.  The funny part is that the server
itself remains perfectly responsive.  The client hangs on a select inside
ldap_int_select(); the same occurred earlier with poll(), and I manually
disabled it in portable.h to see if that was part of the problem.  I've been
reading the slapd-read.c code for hours, looking for something odd.  I even
thought the difference could have been the attrsOnly flag in ldap_search(3),
which is set in slapd-test while it's not in slapd-search.  The backtrace below
shows where the hang occurs.  The odd values of the args inside libldap's calls
are caused by optimization.  I'll try later without.

I'm posting this essentially to keep track of the oddity of this problem (unless
I?m missing anythig really obvious, of course).

p.


[masarati@mbdyn tests]$ gdb ./progs/slapd-read 6970
GNU gdb Red Hat Linux (5.1.90CVS-5)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
Attaching to program:
/home/masarati/Lavoro/sysnet/Ldap/ldap-devel/tests/progs/slapd-read, process
6970
Reading symbols from /usr/local/cyrus-sasl-2.1.16/lib/libsasl2.so.2...done.
Loaded symbols for /usr/local/cyrus-sasl-2.1.16/lib/libsasl2.so.2
Reading symbols from /lib/libcrypt.so.1...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /lib/libresolv.so.2...done.
Loaded symbols for /lib/libresolv.so.2
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /lib/i686/libc.so.6...done.
Loaded symbols for /lib/i686/libc.so.6
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /usr/local/gcc-3.4.2/lib/libgcc_s.so.1...done.
Loaded symbols for /usr/local/gcc-3.4.2/lib/libgcc_s.so.1
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
Reading symbols from /lib/libnss_nisplus.so.2...done.
Loaded symbols for /lib/libnss_nisplus.so.2
Reading symbols from /lib/libnss_dns.so.2...done.
Loaded symbols for /lib/libnss_dns.so.2
0x420e187e in select () from /lib/i686/libc.so.6
(gdb) bt
#0  0x420e187e in select () from /lib/i686/libc.so.6
#1  0x08107d20 in ?? ()
#2  0x0804c21c in ldap_result (ld=0x0, msgid=116, all=1, timeout=0x400, 
    result=0xbfffe270) at result.c:302
#3  0x0804d5ed in ldap_search_s (ld=0x8107a40, 
    base=0xfffffdfe <Address 0xfffffdfe out of bounds>, scope=-514, 
    filter=0xfffffdfe <Address 0xfffffdfe out of bounds>, attrs=0xfffffdfe, 
    attrsonly=-514, res=0xbfffe270) at search.c:362
#4  0x0804a082 in do_read (uri=0x0, host=0x8106b50 "localhost", port=9012, 
    entry=0x8106b60 "cn=Barbara Jensen,ou=Information Technology
Division,ou=People,o=Example,c=US", maxloop=400, maxretries=20) at
slapd-read.c:153
#5  0x08049efa in main (argc=11, argv=0xbfffe354) at slapd-read.c:103
#6  0x42017499 in __libc_start_main () from /lib/i686/libc.so.6