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

Re: RE24 testing call (2.4.17)

Aaron Richton wrote:
Different assertion.

Current function is ldap_pvt_runqueue_resched
current thread: t@7
    [1] __lwp_kill(0x0, 0x6, 0x0, 0xff33c000, 0x0, 0x0), at 0xff31feb0
    [2] raise(0x6, 0x0, 0xfbbff5d8, 0x0, 0x0, 0x0), at 0xff2d0b28
    [3] abort(0x32, 0xfbbff668, 0x32, 0x7efefeff, 0x81010100, 0xff00), at 0xff2b6e70
    [4] __assert(0xff1e7c00, 0xff1e7c0c, 0xa5, 0x2b2368, 0x4, 0x0), at 0xff2b7110
=>[5] ldap_pvt_runqueue_resched(rq = 0x39f298, entry = 0x501c80, defer = 1), line 165 in "rq.c"
    [6] do_syncrepl(ctx = 0xfbbffe0c, arg = 0x501c80), line 1424 in "syncrepl.c"
    [7] ldap_int_thread_pool_wrapper(xpool = 0x3eb0c0), line 663 in "tpool.c"

rq.c:165           assert ( e == entry );

Interesting. This assert is because it tried to reschedule a task that wasn't already on the task list. And the *si info in your other email indicates that this consumer's task pointer should have been (si->si_re), which is a completely different value. Of course, this code only ever gets triggered one of two ways - directly by the runqueue, or as a connection_client callback setup by a task that was running on the runqueue. Since this is a refreshAndPersist consumer, it's most likely running due to connection activity.

The *si pointer comes out of the rtask pointer. There's no way for the *si data to be valid while the rtask is invalid. (And *si is definitely valid.) And there's no way for the rtask to be valid without existing on the runqueue. Very strange.

print si

print *si->si_re

Also strange is that entry->routine is nil; the runqueue could not have invoked the do_syncrepl function without a value here. And the tname is empty, when it should be "do_syncrepl". Yet entry->tspec is valid.

Seems like a race with syncinfo_free()...

(dbx) print e
e = (nil)
(dbx) print *entry
*entry = {
      next_sched = {
          tv_sec  = 0
          tv_usec = 0
      interval   = {
          tv_sec  = 60
          tv_usec = 0
      tnext      = {
          stqe_next = 0x448c70
      rnext      = {
          stqe_next = (nil)
      routine    = (nil)
      arg        = 0x4483b8
      tname      = 0x501c78 ""
      tspec      = 0x4483cc "rid=004"

backtrace and testrun: https://www.nbcs.rutgers.edu/~richton/testfailed.200906101238.tgz

  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/