• Alvaro Herrera's avatar
    Introduce timeout handling framework · f34c68f0
    Alvaro Herrera authored
    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
    f34c68f0
autovacuum.c 83.9 KB