*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.43 1999/05/25 16:07:04 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.44 1999/06/10 14:17:05 vadim Exp $
*
*
* INTERFACE ROUTINES
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
if (TransactionIdDidAbort(xwait))
goto l1;
- /* concurrent xact committed */
- Assert(tp.t_data->t_xmax == xwait);
+ /*
+ * xwait is committed but if xwait had just marked
+ * the tuple for update then some other xaction could
+ * update this tuple before we got to this point.
+ */
+ if (tp.t_data->t_xmax != xwait)
+ goto l1;
if (!(tp.t_data->t_infomask & HEAP_XMAX_COMMITTED))
{
tp.t_data->t_infomask |= HEAP_XMAX_COMMITTED;
LockBuffer(buffer, BUFFER_LOCK_EXCLUSIVE);
if (TransactionIdDidAbort(xwait))
goto l2;
- /* concurrent xact committed */
- Assert(oldtup.t_data->t_xmax == xwait);
+ /*
+ * xwait is committed but if xwait had just marked
+ * the tuple for update then some other xaction could
+ * update this tuple before we got to this point.
+ */
+ if (oldtup.t_data->t_xmax != xwait)
+ goto l2;
if (!(oldtup.t_data->t_infomask & HEAP_XMAX_COMMITTED))
{
oldtup.t_data->t_infomask |= HEAP_XMAX_COMMITTED;
LockBuffer(*buffer, BUFFER_LOCK_EXCLUSIVE);
if (TransactionIdDidAbort(xwait))
goto l3;
- /* concurrent xact committed */
- Assert(tuple->t_data->t_xmax == xwait);
+ /*
+ * xwait is committed but if xwait had just marked
+ * the tuple for update then some other xaction could
+ * update this tuple before we got to this point.
+ */
+ if (tuple->t_data->t_xmax != xwait)
+ goto l3;
if (!(tuple->t_data->t_infomask & HEAP_XMAX_COMMITTED))
{
tuple->t_data->t_infomask |= HEAP_XMAX_COMMITTED;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.26 1999/05/25 16:07:45 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.27 1999/06/10 14:17:06 vadim Exp $
*
* NOTES
* This file contains the high level access-method interface to the
if (!fail)
{
- TransactionIdStore(transactionId, &cachedTestXid);
- cachedTestXidStatus = xidstatus;
+ /*
+ * DO NOT cache status for transactions in unknown state !!!
+ */
+ if (xidstatus == XID_COMMIT || xidstatus == XID_ABORT)
+ {
+ TransactionIdStore(transactionId, &cachedTestXid);
+ cachedTestXidStatus = xidstatus;
+ }
return (bool) (status == xidstatus);
}
TransactionLogUpdate(transactionId, XID_ABORT);
}
-
-void
-TransactionIdFlushCache()
-{
-
- TransactionIdStore(AmiTransactionId, &cachedTestXid);
- cachedTestXidStatus = XID_COMMIT;
-
-}
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.40 1999/06/06 20:19:34 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.41 1999/06/10 14:17:06 vadim Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
AtCommit_Cache();
AtStart_Cache();
- TransactionIdFlushCache();
-
}
void
{
TransactionState s = CurrentTransactionState;
- TransactionIdFlushCache();
FreeXactSnapshot();
XactIsoLevel = DefaultXactIsoLevel;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.107 1999/06/06 20:19:34 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.108 1999/06/10 14:17:07 vadim Exp $
*
*-------------------------------------------------------------------------
*/
if (!ItemIdIsUsed(Pitemid))
elog(ERROR, "Parent itemid marked as unused");
Ptp.t_data = (HeapTupleHeader) PageGetItem(Ppage, Pitemid);
+ Assert(ItemPointerEquals(&(vtld.new_tid),
+ &(Ptp.t_data->t_ctid)));
Assert(Ptp.t_data->t_xmax == tp.t_data->t_xmin);
#ifdef NOT_USED /* I'm not sure that this will wotk properly... */
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.53 1999/05/29 03:58:43 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.54 1999/06/10 14:17:09 vadim Exp $
*
*-------------------------------------------------------------------------
*/
else if (BufferLocks[buffer - 1] & BL_W_LOCK)
{
Assert(buf->w_lock);
- Assert(buf->r_locks == 0 && !buf->ri_lock);
+ Assert(buf->r_locks == 0);
+ Assert(!buf->ri_lock);
Assert(!(BufferLocks[buffer - 1] & (BL_R_LOCK | BL_RI_LOCK)))
buf->w_lock = false;
BufferLocks[buffer - 1] &= ~BL_W_LOCK;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.26 1999/05/31 01:48:13 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.27 1999/06/10 14:17:11 vadim Exp $
*
*-------------------------------------------------------------------------
*/
LockAcquire(LockTableId, &tag, ShareLock);
LockRelease(LockTableId, &tag, ShareLock);
- TransactionIdFlushCache();
-
/*
* Transaction was committed/aborted/crashed - we have to update
* pg_log if transaction is still marked as running.
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: transam.h,v 1.21 1999/05/25 22:42:35 momjian Exp $
+ * $Id: transam.h,v 1.22 1999/06/10 14:17:12 vadim Exp $
*
* NOTES
* Transaction System Version 101 now support proper oid
extern bool TransactionIdDidAbort(TransactionId transactionId);
extern void TransactionIdCommit(TransactionId transactionId);
extern void TransactionIdAbort(TransactionId transactionId);
-extern void TransactionIdFlushCache(void);
/* in transam/transsup.c */
extern void AmiTransactionOverride(bool flag);