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

Re: (ITS#4409) (back-ldap?) livelock in slapd



On Thu, 2006-02-16 at 22:12 +0000, ando@sys-net.it wrote:
> Looks like all your threads are stuck with the same connection, all
> waiting for one of them to succeed in binding.  There appears to be a
> deadlock condition, which should be solved somehow.
> Basically, ldap_back_getconn() should not let a connection be acquired
> before it becomes bound.  Simply giving up the connection in that loop
> would cause some operations to temporarily fail, which may not be the
> best solution.

I have applied a patch to HEAD that should fix this issue.  I haven't
been able to create the issue by normally running slapd, but I could
create it by running slapd under gdb and manually setting lc_refcnt as
if there were multiple threads requesting the same connection so that
more than one is simultaneously __after__ ldap_back_getconn() and
__before__ ldap_back_dobind_int().  This should now be handled safely.
The fix consists in

back-ldap/back-ldap.h 1.87 -> 1.88
back-ldap/bind.c 1.153 -> 1.154

I think you should be able to apply them to re23 code.  Please test and
report.

p.




Ing. Pierangelo Masarati
Responsabile Open Solution
OpenLDAP Core Team

SysNet s.n.c.
Via Dossi, 8 - 27100 Pavia - ITALIA
http://www.sys-net.it
------------------------------------------
Office:   +39.02.23998309          
Mobile:   +39.333.4963172
Email:    pierangelo.masarati@sys-net.it
------------------------------------------