From: | Alexander Korotkov <a(dot)korotkov(at)postgrespro(dot)ru> |
---|---|
To: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Relocation of tuple between release and re-acquire of tuple lock |
Date: | 2016-08-12 12:15:58 |
Message-ID: | CAPpHfduf_ZPFrb-2VzCcF3nD4R1X9n9YHR4LcDs2wt5kNxRp_A@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hackers,
I'm now exploring code working with heap tuples. The following code
in heap_update() catch my eyes.
if (DoesMultiXactIdConflict((MultiXactId) xwait, infomask,
> *lockmode))
> {
> LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> /* acquire tuple lock, if necessary */
> heap_acquire_tuplock(relation, &(oldtup.t_self), *lockmode,
> LockWaitBlock, &have_tuple_lock);
> /* wait for multixact */
> MultiXactIdWait((MultiXactId) xwait, mxact_status, infomask,
> relation, &oldtup.t_self, XLTW_Update,
> &remain);
> checked_lockers = true;
> locker_remains = remain != 0;
> LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
> /*
> * If xwait had just locked the tuple then some other xact
> * could update this tuple before we get to this point. Check
> * for xmax change, and start over if so.
> */
> if (xmax_infomask_changed(oldtup.t_data->t_infomask,
> infomask) ||
> !TransactionIdEquals(HeapTupleGetRawXmax(&oldtup),
> xwait))
> goto l2;
> }
Is it safe to rely on same oldtup.t_data pointer after release
and re-acquire of buffer content lock? Could the heap tuple be relocated
between lock release and re-acquire? I know that we still hold a buffer
pin and vacuum would wait for pin release. But other heap operations could
still call heap_page_prune() which correspondingly can relocate tuple.
Probably, I'm missing something...
------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
From | Date | Subject | |
---|---|---|---|
Next Message | Alexander Korotkov | 2016-08-12 12:33:33 | Re: Relocation of tuple between release and re-acquire of tuple lock |
Previous Message | maksim | 2016-08-12 11:47:06 | Fwd: [BUG] Print timing statistics of trigger execution under turned off timing option of EXPLAIN ANALYZE |