aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2014-11-14 15:14:02 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2014-11-14 15:14:02 -0300
commitd45e8dc527f9e66c56dd91ae3e79eac1b094b96e (patch)
tree1d2382d2ff61aef12d5fb456508fd35999b59519 /src
parent9fc8871212d3000c2964698dfc844b94ba049599 (diff)
downloadpostgresql-d45e8dc527f9e66c56dd91ae3e79eac1b094b96e.tar.gz
postgresql-d45e8dc527f9e66c56dd91ae3e79eac1b094b96e.zip
Allow interrupting GetMultiXactIdMembers
This function has a loop which can lead to uninterruptible process "stalls" (actually infinite loops) when some bugs are triggered. Avoid that unpleasant situation by adding a check for interrupts in a place that shouldn't degrade performance in the normal case. Backpatch to 9.3. Older branches have an identical loop here, but the aforementioned bugs are only a problem starting in 9.3 so there doesn't seem to be any point in backpatching any further.
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/multixact.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c
index c0479ce59a7..3dd9892db54 100644
--- a/src/backend/access/transam/multixact.c
+++ b/src/backend/access/transam/multixact.c
@@ -1258,6 +1258,7 @@ retry:
{
/* Corner case 2: next multixact is still being filled in */
LWLockRelease(MultiXactOffsetControlLock);
+ CHECK_FOR_INTERRUPTS();
pg_usleep(1000L);
goto retry;
}