haproxy/src
Willy Tarreau 2d5cd479bc BUG: queue: fix dequeueing sequence on HTTP keep-alive sessions
When a request completes on a server and the server connection is closed
while the client connection stays open, the HTTP engine releases all server
connection slots and scans the queues to offer the connection slot to
another pending request.

An issue happens when the released connection allows other requests to be
dequeued : may_dequeue_tasks() relies on srv->served which is only decremented
by sess_change_server() which itself is only called after may_dequeue_tasks().
This results in no connection being woken up until another connection terminates
so that may_dequeue_tasks() is called again.

This fix is minimalist and only moves sess_change_server() earlier (which is
safe). It should be reworked and the code factored out so that the same occurrence
in session.c shares the same code.

This bug has been there since the introduction of option-http-server-close and
the fix must be backported to 1.4.
2012-03-01 23:49:20 +01:00
..
acl.c MEDIUM: acl: use temp_pattern to store any string-type information 2011-12-30 17:33:26 +01:00
appsession.c [MINOR] Make appsess{,ion}_refresh static 2011-06-25 21:07:01 +02:00
auth.c [REORG] http: move the http-request rules to proto_http 2011-03-13 22:00:24 +01:00
backend.c MEDIUM: backend: add the 'first' balancing algorithm 2012-02-21 22:27:27 +01:00
base64.c [MINOR] add encode/decode function for 30-bit integers from/to base64 2010-10-30 19:04:33 +02:00
buffers.c CLEANUP: kill buffer_replace() and use an inline instead 2011-11-28 21:01:28 +01:00
cfgparse.c MEDIUM: backend: add the 'first' balancing algorithm 2012-02-21 22:27:27 +01:00
checks.c BUG/MEDIUM: checks: fix slowstart behaviour when server tracking is in use 2011-10-31 11:53:20 +01:00
cttproxy.c [BUG] cttproxy: socket fd leakage in check_cttproxy_version 2010-05-09 21:19:08 +02:00
dumpstats.c BUG/MINOR: cli: correctly remove the whole table on "clear table" 2012-01-09 11:53:09 +01:00
ev_epoll.c [MEDIUM] poll: add a measurement of idle vs work time 2011-09-10 18:01:41 +02:00
ev_kqueue.c [MEDIUM] poll: add a measurement of idle vs work time 2011-09-10 18:01:41 +02:00
ev_poll.c [MEDIUM] poll: add a measurement of idle vs work time 2011-09-10 18:01:41 +02:00
ev_select.c [MEDIUM] poll: add a measurement of idle vs work time 2011-09-10 18:01:41 +02:00
ev_sepoll.c [MEDIUM] poll: add a measurement of idle vs work time 2011-09-10 18:01:41 +02:00
fd.c [BUG] debug: report the correct poller list in verbose mode 2010-11-19 13:25:10 +01:00
freq_ctr.c [MINOR] freq_ctr: add new types and functions for periods different from 1s 2010-08-10 14:01:09 +02:00
frontend.c MEDIUM: acl: use temp_pattern to store any integer-type information 2011-12-30 17:33:26 +01:00
haproxy.c MINOR: config: Parse the string of the log-format config keyword 2012-02-09 17:03:24 +01:00
hdr_idx.c OPTIM/MINOR: move the hdr_idx pools out of the proxy struct 2011-10-24 18:15:04 +02:00
i386-linux-vsys.c [OPTIM] linux: add support for bypassing libc to force using vsyscalls 2010-11-14 17:09:33 +01:00
lb_chash.c [MEDIUM] hash: add support for an 'avalanche' hash-type 2010-11-29 07:28:16 +01:00
lb_fas.c MEDIUM: backend: add the 'first' balancing algorithm 2012-02-21 22:27:27 +01:00
lb_fwlc.c [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_fwrr.c [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_map.c [BUG] url_param hash may return a down server 2010-03-12 06:22:16 +01:00
log.c BUG: fix httplog trailing LF 2012-02-24 11:48:42 +01:00
memory.c [MEDIUM] ensure we don't recursively call pool_gc2() 2009-04-21 02:17:45 +02:00
pattern.c CLEANUP: patterns: get rid of pattern_data_setstring() 2011-12-30 17:33:25 +01:00
peers.c CLEANUP: silence a warning when building on sparc 2012-01-07 22:52:12 +01:00
pipe.c BUILD/MINOR: silent a build warning in src/pipe.c (fcntl) 2011-10-24 17:09:22 +02:00
proto_http.c BUG: queue: fix dequeueing sequence on HTTP keep-alive sessions 2012-03-01 23:49:20 +01:00
proto_tcp.c MEDIUM: acl: use temp_pattern to store any string-type information 2011-12-30 17:33:26 +01:00
proto_uxst.c [MEDIUM] proxy: add a PAUSED state to listeners and move socket tricks out of proxy.c 2011-07-24 19:09:37 +02:00
protocols.c MEDIUM: acl: use temp_pattern to store any integer-type information 2011-12-30 17:33:26 +01:00
proxy.c MINOR: config: Parse the string of the log-format config keyword 2012-02-09 17:03:24 +01:00
queue.c BUG/MEDIUM: zero-weight servers must not dequeue requests from the backend 2012-01-20 16:18:53 +01:00
rbtree.c [MINOR] imported the rbtree function from Linux kernel 2007-01-07 02:12:57 +01:00
regex.c [MINOR] prepare req_*/rsp_* to receive a condition 2010-01-28 18:10:50 +01:00
server.c [CLEANUP] remove many #include <types/xxx> from C files 2008-07-16 10:30:42 +02:00
session.c BUG/MINOR: fix typo in processing of http-send-name-header 2012-01-09 14:27:13 +01:00
sessionhash.c [PATCH] appsessions: cleanup DEBUG_HASH and initialize request_counter 2008-08-13 23:43:26 +02:00
signal.c [MEDIUM] signals: support redistribution of signal zero when stopping 2010-08-27 18:26:11 +02:00
standard.c MINOR: Date and time fonctions that don't use snprintf 2012-02-09 17:03:28 +01:00
stick_table.c [BUG] fix binary stick-tables 2011-05-09 23:30:58 +02:00
stream_interface.c [MINOR] Fix build error in stream_int_register_handler() 2011-08-18 23:52:36 +02:00
stream_sock.c OPTIM: stream_sock: save a failed recv syscall when splice returns EAGAIN 2011-12-12 00:03:55 +01:00
task.c [OPTIM] task: don't scan the run queue if we know it's empty 2011-09-10 20:08:49 +02:00
time.c MINOR: Date and time fonctions that don't use snprintf 2012-02-09 17:03:28 +01:00
uri_auth.c [REORG] http: move the http-request rules to proto_http 2011-03-13 22:00:24 +01:00