aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/misc/timeout.c
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2015-02-03 23:25:47 +0100
committerAndres Freund <andres@anarazel.de>2015-02-03 23:25:47 +0100
commit2505ce0be0b686c5a0a5141e9d080e7fdc35988a (patch)
tree32291d2aaca4045b4e1949fd2e6b5d8d70e46c55 /src/backend/utils/misc/timeout.c
parentd06995710bc7e347d39866c1793ae282498d65e0 (diff)
downloadpostgresql-2505ce0be0b686c5a0a5141e9d080e7fdc35988a.tar.gz
postgresql-2505ce0be0b686c5a0a5141e9d080e7fdc35988a.zip
Remove remnants of ImmediateInterruptOK handling.
Now that nothing sets ImmediateInterruptOK to true anymore, we can remove all the supporting code. Reviewed-By: Heikki Linnakangas
Diffstat (limited to 'src/backend/utils/misc/timeout.c')
-rw-r--r--src/backend/utils/misc/timeout.c38
1 files changed, 3 insertions, 35 deletions
diff --git a/src/backend/utils/misc/timeout.c b/src/backend/utils/misc/timeout.c
index ce4bc13ec3b..a7ec665f6c5 100644
--- a/src/backend/utils/misc/timeout.c
+++ b/src/backend/utils/misc/timeout.c
@@ -259,27 +259,12 @@ static void
handle_sig_alarm(SIGNAL_ARGS)
{
int save_errno = errno;
- bool save_ImmediateInterruptOK = ImmediateInterruptOK;
/*
- * We may be executing while ImmediateInterruptOK is true (e.g., when
- * mainline is waiting for a lock). If SIGINT or similar arrives while
- * this code is running, we'd lose control and perhaps leave our data
- * structures in an inconsistent state. Disable immediate interrupts, and
- * just to be real sure, bump the holdoff counter as well. (The reason
- * for this belt-and-suspenders-too approach is to make sure that nothing
- * bad happens if a timeout handler calls code that manipulates
- * ImmediateInterruptOK.)
- *
- * Note: it's possible for a SIGINT to interrupt handle_sig_alarm before
- * we manage to do this; the net effect would be as if the SIGALRM event
- * had been silently lost. Therefore error recovery must include some
- * action that will allow any lost interrupt to be rescheduled. Disabling
- * some or all timeouts is sufficient, or if that's not appropriate,
- * reschedule_timeouts() can be called. Also, the signal blocking hazard
- * described below applies here too.
+ * Bump the holdoff counter, to make sure nothing we call will process
+ * interrupts directly. No timeout handler should do that, but these
+ * failures are hard to debug, so better be sure.
*/
- ImmediateInterruptOK = false;
HOLD_INTERRUPTS();
/*
@@ -332,24 +317,7 @@ handle_sig_alarm(SIGNAL_ARGS)
}
}
- /*
- * Re-allow query cancel, and then try to service any cancel request that
- * arrived meanwhile (this might in particular include a cancel request
- * fired by one of the timeout handlers). Since we are in a signal
- * handler, we mustn't call ProcessInterrupts unless ImmediateInterruptOK
- * is set; if it isn't, the cancel will happen at the next mainline
- * CHECK_FOR_INTERRUPTS.
- *
- * Note: a longjmp from here is safe so far as our own data structures are
- * concerned; but on platforms that block a signal before calling the
- * handler and then un-block it on return, longjmping out of the signal
- * handler leaves SIGALRM still blocked. Error cleanup is responsible for
- * unblocking any blocked signals.
- */
RESUME_INTERRUPTS();
- ImmediateInterruptOK = save_ImmediateInterruptOK;
- if (save_ImmediateInterruptOK)
- CHECK_FOR_INTERRUPTS();
errno = save_errno;
}