diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 6873c3b4d9..4360cdc1fa 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -2936,6 +2936,8 @@ ExecASUpdateTriggers(EState *estate, ResultRelInfo *relinfo, false); } +int32 GetPrivateRefCount(Buffer buffer); + bool ExecBRUpdateTriggers(EState *estate, EPQState *epqstate, ResultRelInfo *relinfo, @@ -2990,6 +2992,32 @@ ExecBRUpdateTriggers(EState *estate, EPQState *epqstate, epqslot_clean = ExecGetUpdateNewTuple(relinfo, epqslot_candidate, oldslot); +{ +TupleTableSlot *slot = oldslot; + +for (int ii = 1; ii < slot->tts_tupleDescriptor->natts; ii++) +{ +if (slot->tts_isnull[ii]) continue; +elog(LOG, "ExecBRUpdateTriggers after ExecGetUpdateNewTuple() 1; oldslot: %p, slot->tts_tupleDescriptor: %p, slot->buffer: %d, slot->buffer->refcount: %d, slot->tts_values: %p, i: %d, slot->tts_values[ii]: %p", +slot, slot->tts_tupleDescriptor, ((BufferHeapTupleTableSlot *) slot)->buffer, +((BufferHeapTupleTableSlot *) slot)->buffer ? GetPrivateRefCount(((BufferHeapTupleTableSlot *) slot)->buffer) : 0, +slot->tts_values, ii, DatumGetPointer(slot->tts_values[ii])); +} +} + +{ +TupleTableSlot *slot = newslot; + +for (int ii = 1; ii < slot->tts_tupleDescriptor->natts; ii++) +{ + if (slot->tts_isnull[ii]) continue; +elog(LOG, "ExecBRUpdateTriggers after ExecGetUpdateNewTuple() 1; newslot: %p, slot->tts_tupleDescriptor: %p, slot->buffer: %d, slot->buffer->refcount: %d, slot->tts_values: %p, i: %d, slot->tts_values[ii]: %p", +slot, slot->tts_tupleDescriptor, ((BufferHeapTupleTableSlot *) slot)->buffer, +((BufferHeapTupleTableSlot *) slot)->buffer ? GetPrivateRefCount(((BufferHeapTupleTableSlot *) slot)->buffer) : 0, +slot->tts_values, ii, DatumGetPointer(slot->tts_values[ii])); +} +} + if (newslot != epqslot_clean) ExecCopySlot(newslot, epqslot_clean); } diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 7d601bef6d..1f8cd894c1 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -203,7 +203,7 @@ static PrivateRefCountEntry *ReservedRefCountEntry = NULL; static void ReservePrivateRefCountEntry(void); static PrivateRefCountEntry *NewPrivateRefCountEntry(Buffer buffer); static PrivateRefCountEntry *GetPrivateRefCountEntry(Buffer buffer, bool do_move); -static inline int32 GetPrivateRefCount(Buffer buffer); +inline int32 GetPrivateRefCount(Buffer buffer); static void ForgetPrivateRefCountEntry(PrivateRefCountEntry *ref); /* ResourceOwner callbacks to hold in-progress I/Os and buffer pins */ @@ -401,7 +401,7 @@ GetPrivateRefCountEntry(Buffer buffer, bool do_move) * * Only works for shared memory buffers! */ -static inline int32 +int32 GetPrivateRefCount(Buffer buffer) { PrivateRefCountEntry *ref;