From f34c68f09671c4566854c7e20e9253d4f335c0b0 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Mon, 16 Jul 2012 18:43:21 -0400 Subject: Introduce timeout handling framework MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Management of timeouts was getting a little cumbersome; what we originally had was more than enough back when we were only concerned about deadlocks and query cancel; however, when we added timeouts for standby processes, the code got considerably messier. Since there are plans to add more complex timeouts, this seems a good time to introduce a central timeout handling module. External modules register their timeout handlers during process initialization, and later enable and disable them as they see fit using a simple API; timeout.c is in charge of keeping track of which timeouts are in effect at any time, installing a common SIGALRM signal handler, and calling setitimer() as appropriate to ensure timely firing of external handlers. timeout.c additionally supports pluggable modules to add their own timeouts, though this capability isn't exercised anywhere yet. Additionally, as of this commit, walsender processes are aware of timeouts; we had a preexisting bug there that made those ignore SIGALRM, thus being subject to unhandled deadlocks, particularly during the authentication phase. This has already been fixed in back branches in commit 0bf8eb2a, which see for more details. Main author: Zoltán Böszörményi Some review and cleanup by Álvaro Herrera Extensive reworking by Tom Lane --- src/include/storage/proc.h | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) (limited to 'src/include/storage/proc.h') diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h index 31f7099a635..e10aafe99e4 100644 --- a/src/include/storage/proc.h +++ b/src/include/storage/proc.h @@ -15,7 +15,6 @@ #define _PROC_H_ #include "access/xlogdefs.h" -#include "datatype/timestamp.h" #include "storage/latch.h" #include "storage/lock.h" #include "storage/pg_sema.h" @@ -222,8 +221,6 @@ extern int DeadlockTimeout; extern int StatementTimeout; extern bool log_lock_waits; -extern volatile bool cancel_from_timeout; - /* * Function Prototypes @@ -246,19 +243,11 @@ extern void ProcQueueInit(PROC_QUEUE *queue); extern int ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable); extern PGPROC *ProcWakeup(PGPROC *proc, int waitStatus); extern void ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock); +extern void CheckDeadLock(void); extern bool IsWaitingForLock(void); extern void LockErrorCleanup(void); extern void ProcWaitForSignal(void); extern void ProcSendSignal(int pid); -extern bool enable_sig_alarm(int delayms, bool is_statement_timeout); -extern bool disable_sig_alarm(bool is_statement_timeout); -extern void handle_sig_alarm(SIGNAL_ARGS); - -extern bool enable_standby_sig_alarm(TimestampTz now, - TimestampTz fin_time, bool deadlock_only); -extern bool disable_standby_sig_alarm(void); -extern void handle_standby_sig_alarm(SIGNAL_ARGS); - #endif /* PROC_H */ -- cgit v1.2.3