Rusty Conover <rcono...@infogears.com> writes:
> [ same stack trace for the simplified test case ]

Ah, got it finally.  There *is* a relcache flush happening during INSERT
in the 8.4 code, because of FSM extension:

(gdb) bt
#0  RegisterRelcacheInvalidation (dbId=40264, relId=848094) at inval.c:439
#1  0x000000000067a30d in CacheInvalidateRelcache (relation=0x7f39b88403f0)
    at inval.c:1141
#2  0x00000000005c9c45 in fsm_extend (fsm_nblocks=<value optimized out>, 
    rel=<value optimized out>) at freespace.c:589
#3  fsm_readbuf (fsm_nblocks=<value optimized out>, rel=<value optimized out>)
    at freespace.c:522
#4  0x00000000005ca2e4 in fsm_set_and_search (rel=0x9d48, 
    addr=<value optimized out>, slot=0, newValue=220 '\334', 
    minValue=200 '\310') at freespace.c:608
#5  0x00000000005ca675 in RecordAndGetPageWithFreeSpace (rel=0x7f39b88403f0, 
    oldPage=<value optimized out>, oldSpaceAvail=<value optimized out>, 
    spaceNeeded=<value optimized out>) at freespace.c:163
#6  0x0000000000464149 in RelationGetBufferForTuple (relation=0x7f39b88403f0, 
    len=<value optimized out>, otherBuffer=0, options=<value optimized out>, 
    bistate=<value optimized out>) at hio.c:303
#7  0x0000000000462e77 in heap_insert (relation=0x7f39b88403f0, tup=0x14aa580, 
    cid=<value optimized out>, options=0, bistate=0x0) at heapam.c:1890

This code path doesn't exist in CVS HEAD, which means (I think) that the
given test case can't fail in HEAD.  I think I got myself confused by
experimenting variously with HEAD and 8.4 in regular and
CLOBBER_CACHE_ALWAYS modes --- only one of those four combinations will
exhibit a failure with this test case.

Although the particular case apparently can't arise in HEAD, I'm going
to apply Heikki's patch there anyway, since there's clearly a risk of
related problems.

                        regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to