mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
1. xact.c: update comments about changing MyProc->xid and MyProc->xmin.
2. varsup.c:ReadNewTransactionId(): don't read nextXid from disk - this func doesn't allocate next xid, so ShmemVariableCache->nextXid may be used (but GetNewTransactionId() must be called first). 3. vacuum.c: change elog(ERROR, "Child item....") to elog(NOTICE) - this is not ERROR, proper handling is just not implemented, yet. 4. s_lock.c: increase S_MAX_BUSY by 2 times. 5. shmem.c:GetSnapshotData(): have to call ReadNewTransactionId() _after_ SpinAcquire(ShmemIndexLock).
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.21 1999/06/03 04:41:40 vadim Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.22 1999/06/06 20:19:33 vadim Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -335,16 +335,13 @@ ReadNewTransactionId(TransactionId *xid)
|
||||
|
||||
SpinAcquire(OidGenLockId); /* not good for concurrency... */
|
||||
|
||||
if (ShmemVariableCache->xid_count == 0)
|
||||
{
|
||||
TransactionId nextid;
|
||||
|
||||
VariableRelationGetNextXid(&nextid);
|
||||
TransactionIdStore(nextid, &(ShmemVariableCache->nextXid));
|
||||
ShmemVariableCache->xid_count = VAR_XID_PREFETCH;
|
||||
TransactionIdAdd(&nextid, VAR_XID_PREFETCH);
|
||||
VariableRelationPutNextXid(nextid);
|
||||
}
|
||||
/*
|
||||
* Note that we don't check is ShmemVariableCache->xid_count equal
|
||||
* to 0 or not. This will work as long as we don't call
|
||||
* ReadNewTransactionId() before GetNewTransactionId().
|
||||
*/
|
||||
if (ShmemVariableCache->nextXid == 0)
|
||||
elog(ERROR, "ReadNewTransactionId: ShmemVariableCache->nextXid is not initialized");
|
||||
|
||||
TransactionIdStore(ShmemVariableCache->nextXid, xid);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.39 1999/06/03 13:33:12 vadim Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.40 1999/06/06 20:19:34 vadim Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Transaction aborts can now occur two ways:
|
||||
@@ -942,15 +942,11 @@ CommitTransaction()
|
||||
/*
|
||||
* Let others know about no transaction in progress by me.
|
||||
* Note that this must be done _before_ releasing locks we hold
|
||||
* and SpinAcquire(ShmemIndexLock) is required - or bad (too high)
|
||||
* XmaxRecent value might be used by vacuum: UPDATE with xid 0 is
|
||||
* and SpinAcquire(ShmemIndexLock) is required: UPDATE with xid 0 is
|
||||
* blocked by xid 1' UPDATE, xid 1 is doing commit while xid 2
|
||||
* gets snapshot - if xid 2' GetSnapshotData sees xid 1 as running
|
||||
* then it must see xid 0 as running as well or XmaxRecent = 1
|
||||
* might be used by concurrent vacuum causing
|
||||
* ERROR: Child itemid marked as unused
|
||||
* This bug was reported by Hiroshi Inoue and I was able to reproduce
|
||||
* it with 3 sessions and gdb. - vadim 06/03/99
|
||||
* then it must see xid 0 as running as well or it will see two
|
||||
* tuple versions - one deleted by xid 1 and one inserted by xid 0.
|
||||
*/
|
||||
if (MyProc != (PROC *) NULL)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user