Re: [HACKERS] Core dump in regression tests. - Mailing list pgsql-hackers

From Thomas A. Szybist
Subject Re: [HACKERS] Core dump in regression tests.
Date
Msg-id 199809011404.KAA20115@carmina.boxhill
Whole thread Raw
In response to Re: [HACKERS] Core dump in regression tests.  (Bruce Momjian <maillist@candle.pha.pa.us>)
List pgsql-hackers
In message <199809010623.CAA00709@candle.pha.pa.us>, Bruce Momjian writes:
> > Thomas A. Szybist <szybist@boxhill.com>
> > >
> > > >
> > > > If I compile backend/catalog with -O2 then the table creation is
> > >                                     ^^^
> > > > OK. So it looks like it may be indexing.c, even with Bruce's
> > > > recent fixes.
> > >
> > > Do you mean -O0 here?
> > >
> >
> > Yes, a typo, I used -O0 for this dir.
>
> One idea is to track heapDescriptor from CatalogIndexInsert() all the
> way down into the lower functions.
>
> Compile with assert checking, which I assume you are already doing.
>
> Add this "Assert(heapDescriptor->natts != 0)" to the function, and in
> lower functions substitute heapDescriptor with the new variable name it
> took as a function parameter.)
>
> When the assert fails, we can see where it is getting messed up.
>
>
> --
> Bruce Momjian                          |  830 Blythe Avenue
> maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
>   +  If your life is a hard drive,     |  (610) 353-9879(w)
>   +  Christ can be your backup.        |  (610) 853-3000(h)
>

I don't know if this helps, but here's what I've done so far.  I'm now on
a Solaris Box, since the optimization thing seems to be similar to the
Linux Box.  Its just easier for me to work on the Solaris Box.

When indexing.c is compiled with -O2, I get a core dump. (Big news.)
The core dump occurs at line 208 of backend/access/common/heaptuple.c.
at this memmove.

        {
            data = (char *) LONGALIGN(data);
            memmove(data, DatumGetPointer(value[i]),
                att[i]->attlen);
            data += att[i]->attlen;
        }

This consistantly happens when tupleDesc->natts is 1.  When i = 1 on the
second time on the outer loop, value[1] is something like 2123236.
This is out of range when it gets derefenced, memmove barfs.

I was backtracking and turning on debugging one file at a time, but got
lost in fmgr.c.

I'll insert the asserts like you suggested.

Bruce, I can let you on this machine if you like.

Thanks,

Tom

#0  0xef5d0580 in _memcpy ()
(gdb) bt
#0  0xef5d0580 in _memcpy ()
#1  0x297e0 in DataFill (data=0x1a8e0c "", tupleDesc=0x15dce8, value=0xefffccac,
nulls=0xefffccb0 "", infomask=0xefffc9c6, bit=0x1a8e00 "\003") at heaptuple.c:208
#2  0x2bf24 in index_formtuple (tupleDescriptor=0x15dce8, value=0xefffccac, null=0xefffccb0 "")
at indextuple.c:76
#3  0x3ff40 in btinsert (rel=0x1a8060, datum=0xefffccac, nulls=0xefffccb0 "", ht_ctid=0x1a8858,
heapRel=0x166a38) at nbtree.c:358
#4  0xde1bc in fmgr_c (finfo=0xefffcb70, values=0xefffcb80, isNull=0xefffcb6f "") at fmgr.c:115
#5  0xde7bc in fmgr (procedureId=331) at fmgr.c:286
#6  0x38c3c in index_insert ()
#7  0x4d440 in CatalogIndexInsert ()
#8  0x4a6c4 in AddNewAttributeTuples ()
#9  0x4a968 in heap_create_with_catalog ()
#10 0x51b70 in DefineRelation ()
#11 0xb7884 in ProcessUtility ()
#12 0xb5da8 in pg_exec_query_dest ()
#13 0xb5c9c in pg_exec_query ()
#14 0xb6eb8 in PostgresMain ()
#15 0x9ef90 in DoBackend ()
#16 0x9e9dc in BackendStartup ()
#17 0x9df64 in ServerLoop ()
#18 0x9dab8 in PostmasterMain ()
#19 0x722e4 in main ()

pgsql-hackers by date:

Previous
From: Keith Parks
Date:
Subject: Re: [HACKERS] Core dump in regression tests.
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] Core dump in regression tests.