haproxy/src
Willy Tarreau 4fc90efed0 BUG/MEDIUM: splicing is broken since 1.5-dev12
Commit 96199b10 reintroduced the splice() mechanism in the new connection
system. However, it failed to account for the number of transferred bytes,
allowing more bytes than scheduled to be transferred to the client. This
can cause an issue with small-chunked responses, where each packet from
the server may contain several chunks, because a single splice() call may
succeed, then try to splice() a second time as the pipe is not full, thus
consuming the next chunk size.

This patch also reverts commit baf2a5 ("OPTIM: splice: detect shutdowns...")
because it introduced a related regression. The issue is that splice() may
return less data than available also if the pipe is full, so having EPOLLRDHUP
after splice() returns less than expected is not a sufficient indication that
the input is empty.

In both cases, the issue may be detected by the presence of "SD" termination
flags in the logs, and worked around by disabling splicing (using "-dS").

This problem was reported by Sander Klein, and no backport is needed.
2013-04-06 11:46:27 +02:00
..
acl.c MAJOR: sample: maintain a per-proxy list of the fetch args to resolve 2013-04-03 02:13:02 +02:00
appsession.c MEDIUM: make the trash be a chunk instead of a char * 2012-10-29 16:57:30 +01:00
arg.c MAJOR: sample: maintain a per-proxy list of the fetch args to resolve 2013-04-03 02:13:02 +02:00
auth.c CLEANUP: auth: make the code build again with DEBUG_AUTH 2012-05-10 23:25:35 +02:00
backend.c CLEANUP: acl: remove unused references to ACL_USE_* 2013-04-03 02:13:00 +02:00
base64.c [MINOR] add encode/decode function for 30-bit integers from/to base64 2010-10-30 19:04:33 +02:00
buffer.c CLEANUP: buffer: use buffer_empty() instead of buffer_len()==0 2012-12-17 01:14:49 +01:00
cfgparse.c MAJOR: sample: maintain a per-proxy list of the fetch args to resolve 2013-04-03 02:13:02 +02:00
channel.c OPTIM: channel: inline channel_forward's fast path 2012-10-26 01:08:01 +02:00
checks.c BUG/MEDIUM: checks: don't call connect() on unsupported address families 2013-03-08 14:04:53 +01:00
chunk.c MINOR: chunks: centralize the trash chunk allocation 2012-12-23 21:46:07 +01:00
compression.c BUG/MEDIUM: compression: does not forward trailers 2012-11-23 11:12:33 +01:00
connection.c BUG/MEDIUM: connection: always update connection flags prior to computing polling 2012-12-17 01:14:25 +01:00
cttproxy.c CLEANUP: cttproxy: remove a warning on undeclared close() 2012-10-05 22:18:07 +02:00
dumpstats.c MEDIUM: server: Break out set weight processing code 2013-02-13 10:53:40 +01:00
ev_epoll.c BUG/MINOR: epoll: use a fix maxevents argument in epoll_wait() 2013-01-18 15:31:03 +01:00
ev_kqueue.c BUG/MINOR: poll: the I/O handler was called twice for polled I/Os 2012-12-14 00:17:03 +01:00
ev_poll.c MEDIUM: poll: do not use FD_* macros anymore 2013-03-31 15:01:01 +02:00
ev_select.c BUG/MAJOR: ev_select: disable the select() poller if maxsock > FD_SETSIZE 2013-03-31 15:01:05 +02:00
fd.c BUG: polling: don't skip polled events in the spec list 2012-11-12 01:57:14 +01:00
freq_ctr.c BUG/MINOR: time: frequency counters are not totally accurate 2012-12-29 21:50:07 +01:00
frontend.c CLEANUP: acl: remove unused references to ACL_USE_* 2013-04-03 02:13:00 +02:00
haproxy-systemd-wrapper.c BUG/MEDIUM: systemd-wrapper: don't leak zombie processes 2013-04-02 14:34:51 +02:00
haproxy.c MINOR: show PCRE version and JIT status in -vv 2013-04-04 22:39:56 +02: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 MEDIUM: listener: add support for linux's accept4() syscall 2012-10-08 20:11:03 +02:00
lb_chash.c [MEDIUM] hash: add support for an 'avalanche' hash-type 2010-11-29 07:28:16 +01:00
lb_fas.c CLEANUP: lb_first: add reference to a paper describing the original idea 2012-04-07 09:08:45 +02: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
listener.c CLEANUP: acl: remove unused references to ACL_USE_* 2013-04-03 02:13:00 +02:00
log.c MAJOR: sample: maintain a per-proxy list of the fetch args to resolve 2013-04-03 02:13:02 +02:00
memory.c MEDIUM: memory: add the ability to poison memory at run time 2012-05-08 21:28:16 +02:00
payload.c CLEANUP: acl: remove unused references to ACL_USE_* 2013-04-03 02:13:00 +02:00
peers.c CLEANUP: session: use an array for the stick counters 2012-12-09 15:57:16 +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/MINOR: http: add-header/set-header did not accept the ACL condition 2013-04-03 14:13:58 +02:00
proto_tcp.c MAJOR: sample: maintain a per-proxy list of the fetch args to resolve 2013-04-03 02:13:02 +02:00
proto_uxst.c MAJOR: listener: support inheriting a listening fd from the parent 2013-03-11 01:30:01 +01:00
protocol.c REORG: split "protocols" files into protocol and listener 2012-09-15 22:29:32 +02:00
proxy.c MAJOR: sample: maintain a per-proxy list of the fetch args to resolve 2013-04-03 02:13:02 +02:00
queue.c MAJOR: connection: replace struct target with a pointer to an enum 2012-11-12 00:42:33 +01:00
raw_sock.c BUG/MEDIUM: splicing is broken since 1.5-dev12 2013-04-06 11:46:27 +02: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
sample.c MAJOR: sample: maintain a per-proxy list of the fetch args to resolve 2013-04-03 02:13:02 +02:00
server.c MEDIUM: server: Tighten up parsing of weight string 2013-02-13 10:59:50 +01:00
session.c CLEANUP: acl: remove unused references to ACL_USE_* 2013-04-03 02:13:00 +02:00
sessionhash.c [PATCH] appsessions: cleanup DEBUG_HASH and initialize request_counter 2008-08-13 23:43:26 +02:00
shctx.c MINOR: ssl: Setting global tune.ssl.cachesize value to 0 disables SSL session cache. 2012-12-28 14:48:13 +01:00
signal.c BUG/MEDIUM: signal: signal handler does not properly check for signal bounds 2013-01-24 16:19:19 +01:00
ssl_sock.c MINOR: ssl: add support for the "alpn" bind keyword 2013-04-03 02:13:02 +02:00
standard.c BUG/MEDIUM: tools: vsnprintf() is not always reliable on Solaris 2013-04-01 22:58:28 +02:00
stick_table.c BUG/MEDIUM: stick-tables: conversions to strings were broken in dev13 2012-12-09 11:10:30 +01:00
stream_interface.c BUG/MEDIUM: stream_interface: don't close outgoing connections on shutw() 2012-12-30 01:39:37 +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 BUG/MINOR: time: frequency counters are not totally accurate 2012-12-29 21:50:07 +01:00
trace.c MINOR: add a new function call tracer for debugging purposes 2012-05-26 00:12:37 +02:00
uri_auth.c BUG/MEDIUM: uri_auth: missing NULL check and memory leak on memory shortage 2013-01-24 16:19:19 +01:00