summaryrefslogtreecommitdiff
path: root/src/include/access/multixact.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-11-17 18:00:15 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-11-17 18:00:15 +0000
commit4f335a3d7fda4b4a0efd4568ac61d036098d951a (patch)
tree76277f2c8c5abc7e61967fc3fb828f7a2afe1bf5 /src/include/access/multixact.h
parentb6b5aa102b3e53742a59e686ef58f382159ec3c0 (diff)
downloadpostgresql-4f335a3d7fda4b4a0efd4568ac61d036098d951a.tar.gz
Repair two related errors in heap_lock_tuple: it was failing to recognize
cases where we already hold the desired lock "indirectly", either via membership in a MultiXact or because the lock was originally taken by a different subtransaction of the current transaction. These cases must be accounted for to avoid needless deadlocks and/or inappropriate replacement of an exclusive lock with a shared lock. Per report from Clarence Gardner and subsequent investigation.
Diffstat (limited to 'src/include/access/multixact.h')
-rw-r--r--src/include/access/multixact.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/include/access/multixact.h b/src/include/access/multixact.h
index b98c5fd80b..208226916b 100644
--- a/src/include/access/multixact.h
+++ b/src/include/access/multixact.h
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/access/multixact.h,v 1.10 2006/03/24 04:32:13 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/access/multixact.h,v 1.11 2006/11/17 18:00:15 tgl Exp $
*/
#ifndef MULTIXACT_H
#define MULTIXACT_H
@@ -45,6 +45,7 @@ typedef struct xl_multixact_create
extern MultiXactId MultiXactIdCreate(TransactionId xid1, TransactionId xid2);
extern MultiXactId MultiXactIdExpand(MultiXactId multi, TransactionId xid);
extern bool MultiXactIdIsRunning(MultiXactId multi);
+extern bool MultiXactIdIsCurrent(MultiXactId multi);
extern void MultiXactIdWait(MultiXactId multi);
extern bool ConditionalMultiXactIdWait(MultiXactId multi);
extern void MultiXactIdSetOldestMember(void);