haproxy/src
Christopher Faulet 570f799877 BUG/MEDIUM: filters: Be sure to call flt_end_analyze for both channels
In the commit 2b553de5 ("BUG/MINOR: filters: Don't force the stream's wakeup
when we wait in flt_end_analyze"), we removed a task_wakeup in flt_end_analyze
to no consume too much CPU by looping in certain circumstances.

But this fix was too drastic. For Keep-Alive transactions, flt_end_analyze is
often called only for the response. Then the stream is paused until a timeout is
hitted or the next request is received. We need first let a chance to both
channels to call flt_end_analyze function. Then if a filter need to wait here,
it is its responsibility to wake up the stream when needed. To fix the bug, and
thanks to previous commits, we set the flag CF_WAKE_ONCE on channels to pretend
there is an activity. On the current channel, the flag will be removed without
any effect, but for the other side the analyzer will be called immediatly.

Thanks for Lukas Tribus for his detailed analysis of the bug.

This patch must be backported in 1.7 with the 2 previous ones:

  * a94fda3 ("BUG/MINOR: http: Don't reset the transaction if there are still data to send")
  * cdaea89 ("BUG/MINOR: stream: Don't forget to remove CF_WAKE_ONCE flag on response channel")
2017-07-06 23:07:36 +02:00
..
51d.c CLEANUP: 51d: move global settings out of the global section 2016-12-21 21:30:54 +01:00
acl.c BUG/MEDIUM: map/acl: fix unwanted flags inheritance. 2017-07-04 10:45:53 +02:00
applet.c MAJOR: applet: applet scheduler rework. 2017-06-27 14:38:02 +02:00
arg.c BUG/MEDIUM: arg: ensure that we properly unlink unresolved arguments on error 2017-04-13 12:20:52 +02:00
auth.c CLEANUP: auth: use the build options list to report its support 2016-12-21 21:30:54 +01:00
backend.c MINOR: backends: Change get_server_sh/get_server_uh into private function 2017-06-27 14:38:02 +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: buffers: Remove buffer_bounce_realign function 2017-03-31 14:38:22 +02:00
cfgparse.c BUG/MAJOR: http: fix buffer overflow on loguri buffer. 2017-07-05 13:59:29 +02:00
channel.c BUG/MEDIUM: buffers: Fix how input/output data are injected into buffers 2017-03-31 14:36:04 +02:00
checks.c MAJOR/REORG: dns: DNS resolution task and requester queues 2017-06-02 11:58:54 +02:00
chunk.c MINOR: chunks: implement a simple dynamic allocator for trash buffers 2017-02-08 11:16:29 +01:00
cli.c BUG/MAJOR: cli: fix custom io_release was crushed by NULL. 2017-06-30 06:49:31 +02:00
compression.c MINOR: compression: fix -vv output without zlib/slz 2017-01-11 16:11:11 +01:00
connection.c MINOR: connection: send data before receiving 2017-06-27 14:38:02 +02:00
da.c CLEANUP: da: move global settings out of the global section 2016-12-21 21:30:54 +01:00
dns.c BUG/MINOR: warning: ‘need_resend’ may be used uninitialized 2017-06-08 20:09:02 +02:00
ev_epoll.c MINOR: fd: add a new flag HAP_POLL_F_RDHUP to struct poller 2017-03-21 16:30:35 +01:00
ev_kqueue.c MEDIUM: kqueue: only set FD_POLL_IN when there are pending data 2017-03-21 16:35:17 +01:00
ev_poll.c OPTIM: poll: enable support for POLLRDHUP 2017-03-21 16:30:44 +01:00
ev_select.c MINOR: fd: add a new flag HAP_POLL_F_RDHUP to struct poller 2017-03-21 16:30:35 +01:00
fd.c MINOR: proxy: Don't close FDs if not our proxy. 2017-04-13 19:15:17 +02:00
filters.c BUG/MEDIUM: filters: Be sure to call flt_end_analyze for both channels 2017-07-06 23:07:36 +02:00
flt_http_comp.c MINOR: compression: Use a memory pool to allocate compression states 2017-06-30 14:05:29 +02:00
flt_spoe.c MINOR: task/stream: tasks related to a stream must be init by the caller. 2017-06-27 14:38:02 +02:00
flt_trace.c MINOR: filters: Add check_timeouts callback to handle timers expiration on streams 2016-11-21 15:29:58 +01:00
freq_ctr.c BUG/MINOR: time: frequency counters are not totally accurate 2012-12-29 21:50:07 +01:00
frontend.c BUG/MAJOR: frontend: don't dereference a null conn on outgoing connections 2017-06-27 15:47:56 +02:00
haproxy.c BUG/MEDIUM: mworker: don't reuse PIDs passed to the master 2017-06-20 14:43:28 +02:00
hash.c MINOR: hash: add new function hash_crc32 2015-01-20 19:48:05 +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
hlua.c MINOR: task/stream: tasks related to a stream must be init by the caller. 2017-06-27 14:38:02 +02:00
hlua_fcn.c BUILD: lua: build failed on FreeBSD. 2016-12-23 18:03:43 +01: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 BUG/MINOR: hash-balance-factor isn't effective in certain circumstances 2017-04-26 15:45:27 +02:00
lb_fas.c REORG/MEDIUM: server: split server state and flags in two different variables 2014-05-22 11:27:00 +02:00
lb_fwlc.c REORG/MEDIUM: server: split server state and flags in two different variables 2014-05-22 11:27:00 +02:00
lb_fwrr.c REORG/MEDIUM: server: split server state and flags in two different variables 2014-05-22 11:27:00 +02:00
lb_map.c CLEANUP: remove unneeded casts 2016-04-03 14:17:42 +02:00
listener.c MEDIUM: mworker: replace systemd mode by master worker mode 2017-06-02 10:56:32 +02:00
log.c BUG/MINOR: log: pin the front connection when front ip/ports are logged 2017-06-23 11:34:57 +02:00
lru.c MINOR: lru: new function to delete <nb> least recently used keys 2016-01-11 07:31:35 +01:00
mailers.c MEDIUM: Add parsing of mailers section 2015-02-03 00:24:16 +01:00
map.c BUG/MAJOR: map: fix segfault during 'show map/acl' on cli. 2017-06-30 06:49:42 +02:00
memory.c CLEANUP: memory: remove the now unused cli_parse_show_pools() function 2016-12-16 19:40:13 +01:00
namespace.c CLEANUP: namespaces: use the build options list to report it 2016-12-21 21:30:54 +01:00
pattern.c BUG/MEDIUM: map/acl: fix unwanted flags inheritance. 2017-07-04 10:45:53 +02:00
payload.c BUG: payload: fix payload not retrieving arbitrary lengths 2017-03-20 07:25:37 +01:00
peers.c MINOR: task/stream: tasks related to a stream must be init by the caller. 2017-06-27 14:38:02 +02: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: Don't reset the transaction if there are still data to send 2017-07-06 23:06:57 +02:00
proto_tcp.c MINOR: tcp: When binding socket, attempt to reuse one from the old proc. 2017-04-13 19:15:17 +02:00
proto_udp.c CLEANUP: fix inconsistency between fd->iocb, proto->accept and accept() 2016-04-14 11:18:22 +02:00
proto_uxst.c BUG/MEDIUM: unix: never unlink a unix socket from the file system 2017-06-16 10:34:20 +02:00
protocol.c BUILD: protocol: fix some build errors on OpenBSD 2016-08-10 19:31:58 +02:00
proxy.c MINOR: server: cli: Add server FQDNs to server-state file and stats socket. 2017-05-03 06:58:53 +02:00
queue.c MINOR: queue: Change pendconn_from_srv/pendconn_from_px into private functions 2017-06-27 14:38:02 +02:00
raw_sock.c BUG/MINOR: raw_sock: always perfom the last recv if RDHUP is not available 2017-03-21 16:30:44 +01:00
rbtree.c [MINOR] imported the rbtree function from Linux kernel 2007-01-07 02:12:57 +01:00
regex.c MEDIUM: regex: pcre2 support 2016-12-28 12:51:51 +01:00
sample.c MINOR: sample: Add b64dec sample converter 2017-05-12 15:56:52 +02:00
server.c BUG/MAJOR: server: Segfault after parsing server state file. 2017-06-15 15:30:30 +02:00
session.c MEDIUM: stream: make stream_new() always set the target and analysers 2017-06-27 14:38:02 +02:00
shctx.c MEDIUM: ssl: Add support for OpenSSL 1.1.0 2016-11-08 20:54:41 +01:00
signal.c MEDIUM: mworker: handle reload and signals 2017-06-02 10:56:32 +02:00
ssl_sock.c MINOR: ssl: compare server certificate names to the SNI on outgoing connections 2017-07-06 15:15:28 +02:00
standard.c MINOR: tools: make debug_hexdump() take a string prefix 2017-06-02 15:49:31 +02:00
stats.c MINOR: cli: add ACCESS_LVL_MASK to store the access level 2017-05-27 07:02:06 +02:00
stick_table.c MINOR: cli: add ACCESS_LVL_MASK to store the access level 2017-05-27 07:02:06 +02:00
stream.c BUG/MINOR: stream: Don't forget to remove CF_WAKE_ONCE flag on response channel 2017-07-06 23:06:47 +02:00
stream_interface.c BUG/MAJOR: applet: fix a freeze if data is immedately forwarded. 2017-06-30 14:57:24 +02:00
task.c MAJOR: task: task scheduler rework. 2017-06-27 14:38:02 +02:00
tcp_rules.c MINOR: tcp-rules: check that the listener exists before updating its counters 2016-12-22 23:26:37 +01:00
time.c CLEANUP: time: curr_sec_ms doesn't need to be exported 2017-03-29 15:24:33 +02:00
trace.c BUG/MEDIUM: trace.c: rdtsc() is defined in two files 2016-04-09 22:27:01 +02:00
uri_auth.c CLEANUP: uniformize last argument of malloc/calloc 2016-04-03 14:17:42 +02:00
vars.c BUG/MEDIUM: variables: some variable name can hide another ones 2016-12-12 14:34:56 +01:00
wurfl.c CLEANUP: wurfl: move global settings out of the global section 2016-12-21 21:30:54 +01:00
xxhash.c CLEANUP: remove unneeded casts 2016-04-03 14:17:42 +02:00