mirror of
https://github.com/postgres/postgres.git
synced 2025-07-21 16:02:15 +03:00
Remove remnants of ImmediateInterruptOK handling.
Now that nothing sets ImmediateInterruptOK to true anymore, we can remove all the supporting code. Reviewed-By: Heikki Linnakangas
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user