Hello,

JINMEI Tatuya / 神明達哉 schrieb:
> Okay, thanks. It looks like a valid trace. And according to that,
> the other thread was running in a context that could not affect the
> assertion failure. So I guess the real source of the problem is
> somewhere different from the assertion point.
>
> Now I'd like to ask you a couple of more things if you don't mind.


No, I don't, thanks for your assistance and patience.

>
> First, I'd like to know more details about the query that caused this
> error.
>
>> (gdb) thr 1
>> [Switching to thread 1 (process 13242)]#0 0xffffe410 in
>> __kernel_vsyscall ()
>> (gdb) bt
>> #0 0xffffe410 in __kernel_vsyscall ()
>> #1 0xb7b747d0 in raise () from /lib/libc.so.6
>> #2 0xb7b75ea3 in abort () from /lib/libc.so.6
>> #3 0x08064b42 in assertion_failed (file=0xb7f3ca11 "rbtdb.c",
>> line=1158, type=isc_assertiontype_require, cond=0xb7f2ee45 "prev > 0")
>> at ./main.c:159
>> #4 0xb7e87918 in no_references (rbtdb=0xadd16008, node=0x85fff2d8,
>> least_serial=0, lock=isc_rwlocktype_none) at rbtdb.c:1157
>> #5 0xb7e90367 in detachnode (db=0xadd16008, targetp=0xb4292628) at
>> rbtdb.c:3854
>> #6 0xb7e4ba6e in dns_db_detachnode (db=0xadd16008, nodep=0xb4292628) at
>> db.c:525
>> #7 0xb7ee20b0 in cache_message (fctx=0xab7dc7e8, addrinfo=0xa9bd8138,

> [...]
>
> Again, if you don't mind, please try the following and show the
> results:
>
> (gdb) f 7
> (gdb) p *fctx
> (gdb) p (unsigned char *)((dns_rbtnode_t *)node + 1)
>
> NOTE: this will disclose the query name, type and other contexts of
> the query, which may not want to show others. Please first check the
> output, and paste it only when you are sure it's okay.


Here you are:

(gdb) f 7
#7 0xb7ee20b0 in cache_message (fctx=0xab7dc7e8, addrinfo=0xa9bd8138,
now=1160247809) at resolver.c:3924
3924 dns_db_detachnode(fctx->cache, &node);
(gdb) p *fctx
$1 = {magic = 1176576289, res = 0xaea83008, name = {magic = 1145983854,
ndata = 0xab7a52e8 "\00219\00217\00251\00289\ain-addr\004arpa",
length = 26, labels = 7, attributes = 5, offsets = 0x0, buffer =
0x0, link = {prev = 0xffffffff, next = 0xffffffff}, list = {
head = 0x0, tail = 0x0}}, type = 12, options = 32, bucketnum = 25,
info = 0xab7a4268 "19.17.51.89.in-addr.arpa/PTR",
state = fetchstate_active, want_shutdown = isc_boolean_false, cloned =
isc_boolean_true, spilled = isc_boolean_false, references = 1,
control_event = {ev_size = 44, ev_attributes = 0, ev_tag = 0x0,
ev_type = 262144, ev_action = 0xb7ee8300 ,
ev_arg = 0xab7dc7e8, ev_sender = 0x0, ev_destroy = 0, ev_destroy_arg
= 0x0, ev_link = {prev = 0xffffffff, next = 0xffffffff}}, link = {
prev = 0xab7a33f8, next = 0xab7dc008}, events = {head = 0xa79c5aa8,
tail = 0xa79c5aa8}, domain = {magic = 1145983854,
ndata = 0xab7b1518 "\00217\00251\00289\ain-addr\004arpa", length =
23, labels = 6, attributes = 5, offsets = 0x0, buffer = 0x0, link = {
prev = 0xffffffff, next = 0xffffffff}, list = {head = 0x0, tail =
0x0}}, nameservers = {magic = 1145983826, methods = 0xb7f4db00,
link = {prev = 0xffffffff, next = 0xffffffff}, rdclass = 1, type =
2, ttl = 50681, trust = 5, covers = 0, attributes = 0, count = 492,
private1 = 0xadd16008, private2 = 0xa4d2d908, private3 = 0xa4d26b30,
privateuint4 = 0, private5 = 0xa4d26b68, private6 = 0x0},
attributes = 385, timer = 0x546287e8, expires = {seconds = 1160247839,
nanoseconds = 379426000}, interval = {seconds = 0,
nanoseconds = 500000000}, qmessage = 0xab7dac68, rmessage =
0xab7dad70, queries = {head = 0xa79ba4e8, tail = 0xa79ba4e8}, finds = {
head = 0xa983add8, tail = 0xa9bc2910}, find = 0xa983add8, altfinds =
{head = 0x0, tail = 0x0}, altfind = 0x0, forwaddrs = {head = 0x0,
tail = 0x0}, altaddrs = {head = 0x0, tail = 0x0}, forwarders = {head
= 0x0, tail = 0x0}, fwdpolicy = dns_fwdpolicy_none, bad = {
head = 0x0, tail = 0x0}, edns = {head = 0xa79db408, tail =
0xa79db408}, edns512 = {head = 0x0, tail = 0x0}, validators = {head = 0x0,
tail = 0x0}, cache = 0xadd16008, adb = 0x830e890, pending = 0,
restarts = 1, timeouts = 0, nsname = {magic = 1145983854, ndata = 0x0,
length = 0, labels = 0, attributes = 0, offsets = 0x0, buffer = 0x0,
link = {prev = 0xffffffff, next = 0xffffffff}, list = {head = 0x0,
tail = 0x0}}, nsfetch = 0x0, nsrrset = {magic = 1145983826,
methods = 0x0, link = {prev = 0xffffffff, next = 0xffffffff},
rdclass = 0, type = 0, ttl = 0, trust = 0, covers = 0, attributes =
0, count = 4294967295, private1 = 0x0, private2 = 0x0,
private3 = 0x0, privateuint4 = 0, private5 = 0x0, private6 = 0x0}}
(gdb) p (unsigned char *)((dns_rbtnode_t *)node + 1)
No symbol "node" in current context.

When my C knowledge is correct, you want to print the content of "node"
as a string constant?

I'm gonna try your patch and let you know what I found out.

Kind regards.
--
_____________________________
[Marco Schumann