Don't allow immediate interrupts during authentication anymore.
authorAndres Freund <andres@anarazel.de>
Tue, 3 Feb 2015 21:54:48 +0000 (22:54 +0100)
committerAndres Freund <andres@anarazel.de>
Tue, 3 Feb 2015 21:54:48 +0000 (22:54 +0100)
commit6647248e3708843be93c7ca670cd219fe8e61026
tree8e68a84f89a741147de96f1dfbb0e80f4d40c62d
parentcec916f35be5531efdaf721a46313feb36e0cd76
Don't allow immediate interrupts during authentication anymore.

We used to handle authentication_timeout by setting
ImmediateInterruptOK to true during large parts of the authentication
phase of a new connection.  While that happens to work acceptably in
practice, it's not particularly nice and has ugly corner cases.

Previous commits converted the FE/BE communication to use latches and
implemented support for interrupt handling during both
send/recv. Building on top of that work we can get rid of
ImmediateInterruptOK during authentication, by immediately treating
timeouts during authentication as a reason to die. As die interrupts
are handled immediately during client communication that provides a
sensibly quick reaction time to authentication timeout.

Additionally add a few CHECK_FOR_INTERRUPTS() to some more complex
authentication methods. More could be added, but this already should
provides a reasonable coverage.

While it this overall increases the maximum time till a timeout is
reacted to, it greatly reduces complexity and increases
reliability. That seems like a overall win. If the increase proves to
be noticeable we can deal with those cases by moving to nonblocking
network code and add interrupt checking there.

Reviewed-By: Heikki Linnakangas
src/backend/libpq/auth.c
src/backend/libpq/be-secure-openssl.c
src/backend/libpq/crypt.c
src/backend/tcop/postgres.c
src/backend/utils/init/postinit.c