Re: Buffer locking is special (hints, checksums, AIO writes)

From: Alexander Lakhin <exclusion(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Andres Freund <andres(at)anarazel(dot)de>
Cc: Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>, Kirill Reshke <reshkekirill(at)gmail(dot)com>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Melanie Plageman <melanieplageman(at)gmail(dot)com>, Matthias van de Meent <boekewurm+postgres(at)gmail(dot)com>, pgsql-hackers(at)postgresql(dot)org, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Noah Misch <noah(at)leadboat(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Subject: Re: Buffer locking is special (hints, checksums, AIO writes)
Date: 2026-01-24 19:00:00
Message-ID: 90bd2cbb-49ce-4092-9f61-5ac2ab782c94@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello Andres,

16.01.2026 01:02, Tom Lane wrote:
> Various buildfarm animals are complaining about fcb9c977a,
> similarly to this from calliphoridae [1]:

I've discovered another anomaly introduced with fcb9c977a, this time
run-time:
for i in `seq 300`; do
echo "iteration $i"

echo "
create table t(f1 text);
create index on t using spgist(f1);
insert into t select 'a' from generate_series(1, 9000) g(i);
vacuum analyze t;
insert into t select 'b' from generate_series(1, 1000) g(i);
drop table t;
" | psql >/dev/null -v ON_ERROR_STOP=1 || break;
done

fails for me as below:
...
iteration 39
server closed the connection unexpectedly

Core was generated by `postgres: law regression [local] INSERT                 '.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44

warning: 44     ./nptl/pthread_kill.c: Нет такого файла или каталога
(gdb) bt
#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
#1  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#2  __GI___pthread_kill (threadid=<optimized out>, signo=signo(at)entry=6) at ./nptl/pthread_kill.c:89
#3  0x000073625aa4527e in __GI_raise (sig=sig(at)entry=6) at ../sysdeps/posix/raise.c:26
#4  0x000073625aa288ff in __GI_abort () at ./stdlib/abort.c:79
#5  0x00005a479e2f685f in ExceptionalCondition (conditionName=conditionName(at)entry=0x5a479e403cb8 "entry->data.lockmode
== BUFFER_LOCK_UNLOCK", fileName=fileName(at)entry=0x5a479e37a84f "bufmgr.c", lineNumber=lineNumber(at)entry=5908) at assert.c:65
#6  0x00005a479e14d87c in BufferLockConditional (buffer=<optimized out>, buf_hdr=0x73624e882b40,
mode=mode(at)entry=BUFFER_LOCK_EXCLUSIVE) at bufmgr.c:5908
#7  0x00005a479e14f4d5 in ConditionalLockBuffer (buffer=buffer(at)entry=13500) at bufmgr.c:6474
#8  0x00005a479de44da9 in SpGistNewBuffer (index=index(at)entry=0x73625b1f6ce8) at spgutils.c:420
#9  0x00005a479de45397 in allocNewBuffer (index=index(at)entry=0x73625b1f6ce8, flags=flags(at)entry=3) at spgutils.c:528
#10 0x00005a479de456a0 in SpGistGetBuffer (index=index(at)entry=0x73625b1f6ce8, flags=flags(at)entry=3, needSpace=<optimized
out>, needSpace(at)entry=4088, isNew=isNew(at)entry=0x7ffd8fa1b2a7) at spgutils.c:663
#11 0x00005a479de3c913 in doPickSplit (index=index(at)entry=0x73625b1f6ce8, state=state(at)entry=0x7ffd8fa1b740,
current=current(at)entry=0x7ffd8fa1b510, parent=parent(at)entry=0x7ffd8fa1b530,
newLeafTuple=newLeafTuple(at)entry=0x5a47cbd7adc8, level=level(at)entry=4, isNulls=false, isNew=false) at spgdoinsert.c:1046
#12 0x00005a479de3e542 in spgdoinsert (index=index(at)entry=0x73625b1f6ce8, state=state(at)entry=0x7ffd8fa1b740,
heapPtr=heapPtr(at)entry=0x5a47cbe0b248, datums=datums(at)entry=0x7ffd8fa1b8d0, isnulls=isnulls(at)entry=0x7ffd8fa1b8b0) at
spgdoinsert.c:2134
#13 0x00005a479de40137 in spginsert (index=0x73625b1f6ce8, values=0x7ffd8fa1b8d0, isnull=0x7ffd8fa1b8b0,
ht_ctid=0x5a47cbe0b248, heapRel=<optimized out>, checkUnique=<optimized out>, indexUnchanged=false,
indexInfo=0x5a47cbe0b0b8) at spginsert.c:206
#14 0x00005a479df981d8 in ExecInsertIndexTuples (resultRelInfo=resultRelInfo(at)entry=0x5a47cbe07120,
slot=slot(at)entry=0x5a47cbe0b218, estate=estate(at)entry=0x5a47cbe06c10, update=update(at)entry=false,
noDupErr=noDupErr(at)entry=false, specConflict=specConflict(at)entry=0x0, arbiterIndexes=0x0, onlySummarizing=false) at
execIndexing.c:449
#15 0x00005a479dfcc6a9 in ExecInsert (context=context(at)entry=0x7ffd8fa1bb70,
resultRelInfo=resultRelInfo(at)entry=0x5a47cbe07120, slot=slot(at)entry=0x5a47cbe0b218, canSetTag=<optimized out>,
inserted_tuple=inserted_tuple(at)entry=0x0, insert_destrel=insert_destrel(at)entry=0x0) at nodeModifyTable.c:1240
#16 0x00005a479dfcdf67 in ExecModifyTable (pstate=0x5a47cbe06f10) at nodeModifyTable.c:4485
...

Best regards,
Alexander

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2026-01-24 20:31:14 Re: Buffer locking is special (hints, checksums, AIO writes)
Previous Message Tom Lane 2026-01-24 17:54:08 Re: ABI Compliance Checker GSoC Project