(thx dinoex)
fix removal of server.pid-file when testing config with lighttpd -tt
(regression in lighttpd 1.4.60, 1.4.61)
x-ref:
"Test the configuration file while lighttpd is running."
https://redmine.lighttpd.net/issues/3115
warn if known dynamic modules listed before mod_auth in server.modules
e.g. mod_auth must be listed before mod_fastcgi in server.modules
for fastcgi.server = ( "mode" => "authorizer" ) to work properly
(thx ThomasDevoogdt)
close backend socket fds more quickly by polling with zero timeout when
there are pending fds scheduled to be closed after the next poll.
x-ref:
"Slow request handling in Lighttpd 1.4.60"
https://redmine.lighttpd.net/boards/2/topics/10063
buffer_append_strftime() requires a non-NULL const string for format
buffer_append_string_encoded() and buffer_append_string_c_escaped()
both will handle encoding a 0-length string. Since a 0-length string
is not expected, do not special-case it. C type buffer_encoding_t
expects a constant value to be passed, so encoding map is not NULL.
connection_handle_write_state() call to subrequest handler might set
r->resp_body_finished, but we need to check if r->write_queue is empty
before changing state from CON_STATE_WRITE to CON_STATE_RESPONSE_END
(If r->write_queue was already empty when the subrequest handler marked
resp_body_finished, connection_state_machine_h2() could miss changing
the request state to CON_STATE_RESPONSE_END)
x-ref:
"HTTP/2 requests sometimes take very long (missing last chunk)"
https://redmine.lighttpd.net/issues/3111
"Slow request handling in Lighttpd 1.4.60"
https://redmine.lighttpd.net/boards/2/topics/10063
crypt() static output buffer is cleared upon next call to crypt(),
but clear output buffer anyway since next call to crypt() might be
much later. Only clear crypt() output if length >= 13, since if
there is an error in crypt(), 'man crypt' warns:
"Some implementations of crypt, upon error, return an invalid hash that
is stored in a read-only location or only initialized once, which means
that it is only safe to erase the buffer pointed to by the crypt return
value if an error did not occur."
use pwritev(), where available, with chunkqueue_steal_with_tempfiles()
The initial write to tempfiles (when response initially grows too
large in memory) can be multiple MEM_CHUNKs, so attempt to use
single pwritev() syscall