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

Re: syncrepl consumer locks up (ITS#3263)



On Tuesday 03 August 2004 15:49, Jong-Hyuk wrote:
> Thanks for the info. This level of detail is really helping in locating the
> problem.
> Looks like another interaction with the group ACL. It segfaulted while it
> tried to read the group entry.
> I can't tell how far bdb_entry_get proceeded before he died, though. Can
> you locate wehre it faulted within bdb_entry_get ?
> - Jong-Hyuk
>

I had to compile a slapd with debug symbols first. Here it is:

(dbx) where -v
current thread: t@5
=>[1] bdb_entry_get(op = 0xf9bffb0c, ndn = 0xf9bff1b4, oc = 0x4ad710, at = 
0x4c9948, rw = 0, ent = 0xf9bfed30), line 268 in "id2entry.c"
  [2] be_entry_get_rw(op = 0xf9bffb0c, ndn = 0xf9bff1b4, oc = 0x4ad710, at = 
0x4c9948, rw = 0, e = 0xf9bfed30), line 1245 in "backend.c"
  [3] backend_group(op = 0xf9bffb0c, target = 0x6cb670, gr_ndn = 0xf9bff1b4, 
op_ndn = 0xf9bffc0c, group_oc = 0x4ad710, group_at = 0x4c9948), line 1288 in 
"backend.c"
  [4] acl_mask(a = 0x486c48, mask = 0xf9bff5c8, op = 0xf9bffb0c, e = 0x6cb670, 
desc = 0x479fe0, val = (nil), matches = 0xf9bff2a0, count = 22, state = 
0xf9bff66c), line 1244 in "acl.c"
  [5] access_allowed(op = 0xf9bffb0c, e = 0x6cb670, desc = 0x479fe0, val = 
(nil), access = ACL_AUTH, state = 0xf9bff66c), line 366 in "acl.c"
  [6] backend_attribute(op = 0xf9bffb0c, target = (nil), edn = 0xf9bffb34, 
entry_at = 0x479fe0, vals = 0xf9bffa40), line 1438 in "backend.c"
  [7] do_syncrep1(op = 0xf9bffb0c, si = 0x4887a8), line 400 in "syncrepl.c"
  [8] do_syncrepl(ctx = 0xf9bffe20, arg = 0x4e7ee8), line 854 in "syncrepl.c"
  [9] ldap_int_thread_pool_wrapper(0x467568, 0xf9bffe20, 0x5, 0x47fb48, 0x28, 
0x47fb50), at 0x18c6ec
(dbx) dump
bdb = 0x4884b8
lock = RECORD
ei = 0xfe8b0018
rc = -92402991
free_lock_id = 0
locker = 0
txn = (nil)
op = 0xf9bffb0c
at = 0x4c9948
ent = 0xf9bfed30
oc = 0x4ad710
rw = 0
ndn = 0xf9bff1b4
at_name = 0x4aaa78 "member"
e = (nil)
boi = 0x5c7534

It looks like boi->boi_bdb is "nil" which leads to the crash:

(dbx) print *boi
*boi = {
    boi_bdb       = (nil)
    boi_txn       = (nil)
    boi_lock      = {
        off  = 294024U
        ndx  = 32U
        gen  = 65407U
        mode = DB_LOCK_READ
    }
    boi_err       = 0
    boi_locker    = 0
    boi_acl_cache = 0
}


Karsten.
-- 
Death is only a state of mind.

Only it doesn't leave you much time to think about anything else.