diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1999-06-03 04:41:41 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1999-06-03 04:41:41 +0000 |
commit | 9680a712051bcf043beab5a49472e7da2f5a369a (patch) | |
tree | 21a86dd8ac5e39b661833194c31abf183f1344b9 /src/backend/access/transam/varsup.c | |
parent | f3d2b2e0c7c9eb9d79f26591f844d6edb123335c (diff) |
1. MyProc->xid assignment is moved to GetNewTransactionId so newer
transactions will not assume that MyProc transaction was committed
before snapshot calculations. With old MyProc->xid assignment
(in xact.c:StartTransaction()) there was ability to see the same
row twice (I used gdb for this)!...
2. Assignments of InvalidTransactionId to MyProc->xid and MyProc->xmin
are moved from xact.c:CommitTransaction() to
xact.c:RecordTransactionCommit() - this invalidation must be done
before releasing transaction locks or bad (too high) XmaxRecent value
might be used by vacuum ("ERROR: Child itemid marked as unused"
reported by "Hiroshi Inoue" <Inoue@tpf.co.jp>; once again, gdb
allowed me reproduce this error).
Diffstat (limited to 'src/backend/access/transam/varsup.c')
-rw-r--r-- | src/backend/access/transam/varsup.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index 4bcc55bb92c..fd23de1d984 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.20 1999/05/25 16:07:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.21 1999/06/03 04:41:40 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -19,6 +19,7 @@ #include <access/xact.h> #include <access/heapam.h> #include <catalog/catname.h> +#include <storage/proc.h> static void GetNewObjectIdBlock(Oid *oid_return, int oid_block_size); static void VariableRelationGetNextOid(Oid *oid_return); @@ -308,6 +309,9 @@ GetNewTransactionId(TransactionId *xid) TransactionIdAdd(&(ShmemVariableCache->nextXid), 1); (ShmemVariableCache->xid_count)--; + if (MyProc != (PROC *) NULL) + MyProc->xid = *xid; + SpinRelease(OidGenLockId); } |