postgres.git / summary / log / commit / refs
commit d45e8dc527f9e66c56dd91ae3e79eac1b094b96e
Author: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Fri Nov 14 18:14:02 2014 +0000
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.
src/backend/access/transam/multixact.c | 1 +
1 file changed, 1 insertion(+)
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;
}
[parent: 9fc8871212d3]