haproxy/src
Christopher Faulet c17c31c822 BUG/MEDIUM: mux-h1: Don't wake h1s if mux is blocked on lack of output buffer
After sending some data, we try to wake the H1 stream to resume data
processing at the stream level, except if the output buffer is still
full. However we must also be sure the mux is not blocked because of an
allocation failure on this buffer. Otherwise, it may lead to a ping-pong
loop between the stream and the mux to send more data with an unallocated
output buffer.

Note there is a mechanism to queue buffers allocations when a failure
happens. However this mechanism is totally broken since the filters were
introducted in HAProxy 1.7. And it is worse now with the multiplexers. So
this patch fixes a possible loop needlessly consuming all the CPU. But
buffer allocation failures must remain pretty rare.

This patch must be backported as far as 2.0.
2022-02-21 16:05:47 +01:00
..
acl.c MINOR: add ::1 to predefined LOCALHOST acl 2021-10-18 07:21:28 +02:00
action.c CLEANUP: Apply ha_free.cocci 2021-11-05 07:48:38 +01:00
activity.c MINOR: memprof: add one pointer size to the size of allocations 2021-10-22 16:40:09 +02:00
applet.c BUG/MINOR: applet: Notify the other side if data were consumed by an applet 2021-04-28 10:51:08 +02:00
arg.c MINOR: arg: Be able to forbid unresolved args when building an argument list 2021-09-30 16:37:05 +02:00
auth.c BUILD: auth: include missing list.h 2021-05-08 12:29:51 +02:00
backend.c BUILD: tree-wide: avoid warnings caused by redundant checks of obj_types 2021-12-06 09:11:47 +01:00
base64.c BUG/MINOR: base64: base64urldec() ignores padding in output size check 2021-08-25 16:14:14 +02:00
cache.c BUG/MINOR: cache: Fix loop on cache entries in "show cache" 2021-11-23 16:15:02 +01:00
calltrace.c BUILD: trace: include tools.h 2020-09-25 17:54:48 +02:00
cbuf.c MINOR: quic: Make circular buffer internal buffers be variable-sized. 2021-09-23 15:27:25 +02:00
cfgcond.c MINOR: ssl: Add ssllib_name_startswith precondition 2021-10-13 11:28:08 +02:00
cfgdiag.c CLEANUP: assorted typo fixes in the code and comments 2021-04-26 10:42:58 +02:00
cfgparse-global.c MINOR: config: use a standard parser for the "nbthread" keyword 2021-09-27 09:47:40 +02:00
cfgparse-listen.c BUG/MEDIUM: sample: Cumulate frontend and backend sample validity flags 2021-10-15 14:12:19 +02:00
cfgparse-quic.c MEDIUM: quic: implement Retry emission 2022-01-12 11:08:48 +01:00
cfgparse-ssl.c BUG/MEDIUM: ssl: initialize correctly ssl w/ default-server 2021-12-29 14:42:16 +01:00
cfgparse-tcp.c MINOR: server: prepare parsing for dynamic servers 2021-03-18 15:51:12 +01:00
cfgparse-unix.c MINOR: listener: create a new struct "settings" in bind_conf 2020-09-16 20:13:13 +02:00
cfgparse.c MINOR: listener: define per-thr struct 2022-01-26 16:13:54 +01:00
channel.c MINOR: channel: add new function co_getdelim() to support multiple delimiters 2022-01-19 19:16:47 +01:00
check.c BUILD: checks: fix inlining issue on set_srv_agent_[addr,port} 2022-01-28 19:04:02 +01:00
chunk.c MINOR: pool: move pool declarations to read_mostly 2021-04-10 19:27:41 +02:00
cli.c MINOR: mworker/cli: add flags in the prompt 2022-02-02 15:51:24 +01:00
clock.c REORG: thread/clock: move the clock parts of thread_info to thread_ctx 2021-10-08 17:22:26 +02:00
compression.c REORG: thread/clock: move the clock parts of thread_info to thread_ctx 2021-10-08 17:22:26 +02:00
connection.c MEDIUM: connection: rename fc_conn_err and bc_conn_err to fc_err and bc_err 2021-11-06 09:20:07 +01:00
cpuset.c BUILD: cpuset: do not use const on the source of CPU_AND/CPU_ASSIGN 2022-01-28 19:04:02 +01:00
debug.c BUILD: debug/cli: condition test of O_ASYNC to its existence 2022-01-25 14:51:53 +01:00
dgram.c REORG: dgram: rename proto_udp to dgram 2020-06-11 10:18:59 +02:00
dict.c CLEANUP: atomic/tree-wide: replace single increments/decrements with inc/dec 2021-04-07 18:18:37 +02:00
dns.c MINOR: stream: Use backend stream-interface dst address instead of target_addr 2021-10-27 11:35:59 +02:00
dynbuf.c REORG: thread/sched: move the last dynamic thread_info to thread_ctx 2021-10-08 17:22:26 +02:00
eb32sctree.c REORG: ebtree: move the include files from ebtree to include/import/ 2020-06-11 09:31:11 +02:00
eb32tree.c REORG: ebtree: move the include files from ebtree to include/import/ 2020-06-11 09:31:11 +02:00
eb64tree.c REORG: ebtree: move the include files from ebtree to include/import/ 2020-06-11 09:31:11 +02:00
ebimtree.c CLEANUP: include: tree-wide alphabetical sort of include files 2020-06-11 10:18:59 +02:00
ebistree.c REORG: ebtree: move the include files from ebtree to include/import/ 2020-06-11 09:31:11 +02:00
ebmbtree.c CLEANUP: assorted typo fixes in the code and comments 2021-08-16 12:37:59 +02:00
ebpttree.c REORG: ebtree: move the include files from ebtree to include/import/ 2020-06-11 09:31:11 +02:00
ebsttree.c REORG: ebtree: move the include files from ebtree to include/import/ 2020-06-11 09:31:11 +02:00
ebtree.c BUG/MEDIUM: ebtree: use a byte-per-byte memcmp() to compare memory blocks 2020-06-16 11:30:33 +02:00
errors.c CLEANUP: Apply xalloc_size.cocci 2021-09-17 17:22:05 +02:00
ev_epoll.c MINOR: activity: get the run_time from the clock updates 2021-10-08 17:22:26 +02:00
ev_evports.c BUILD: evports: remove a leftover from the dead_fd cleanup 2021-11-30 09:34:32 +01:00
ev_kqueue.c MINOR: activity: get the run_time from the clock updates 2021-10-08 17:22:26 +02:00
ev_poll.c MINOR: activity: get the run_time from the clock updates 2021-10-08 17:22:26 +02:00
ev_select.c MINOR: activity: get the run_time from the clock updates 2021-10-08 17:22:26 +02:00
extcheck.c MINOR: proxy: Introduce proxy flags to replace disabled bitfield 2021-10-15 14:12:19 +02:00
fcgi-app.c CLEANUP: assorted typo fixes in the code and comments 2021-08-16 12:37:59 +02:00
fcgi.c CLEANUP: include: tree-wide alphabetical sort of include files 2020-06-11 10:18:59 +02:00
fd.c DEBUG: fd: make sure we never try to insert/delete an impossible FD number 2022-01-31 21:00:35 +01:00
filters.c MINOR: proxy: Introduce proxy flags to replace disabled bitfield 2021-10-15 14:12:19 +02:00
fix.c CLEANUP: assorted typo fixes in the code and comments 2021-08-16 12:37:59 +02:00
flt_http_comp.c MINOR: compression: Warn for 'compression offload' in defaults sections 2021-11-05 16:36:42 +01:00
flt_spoe.c BUG/MAJOR: spoe: properly detach all agents when releasing the applet 2022-02-16 14:42:13 +01:00
flt_trace.c CLEANUP: Apply ist.cocci 2021-11-08 12:08:26 +01:00
freq_ctr.c CLEANUP: tree-wide: remove unneeded include time.h in ~20 files 2021-10-07 01:41:14 +02:00
frontend.c MINOR: frontend: Rely on client src and dst addresses at stream level 2021-10-27 11:34:21 +02:00
h1.c BUG/MEDIUM: h1: Properly reset h1m flags when headers parsing is restarted 2021-12-02 09:46:29 +01:00
h1_htx.c BUILD: tree-wide: mark a few numeric constants as explicitly long long 2022-01-28 19:04:02 +01:00
h2.c CLEANUP: Apply ist.cocci 2021-11-08 08:05:39 +01:00
h3.c MINOR: h3: remove unused return value on decode_qcs 2022-02-16 14:37:56 +01:00
haproxy.c BUG/MINOR: mworker: does not erase the pidfile upon reload 2022-02-14 09:28:13 +01:00
hash.c REORG: include: move base64.h, errors.h and hash.h from common to to haproxy/ 2020-06-11 10:18:56 +02:00
hlua.c MINOR: httpclient/lua: add 'dst' optionnal field 2022-02-17 20:07:00 +01:00
hlua_fcn.c BUG/MINOR: lua: don't expose internal proxies 2021-11-24 16:14:24 +01:00
hpack-dec.c CLEANUP: Use isttest(const struct ist) whenever possible 2021-03-03 05:07:10 +01:00
hpack-enc.c CLEANUP: include: tree-wide alphabetical sort of include files 2020-06-11 10:18:59 +02:00
hpack-huff.c CONTRIB: move some dev-specific tools to dev/ 2021-04-02 17:48:42 +02:00
hpack-tbl.c MINOR: pool: move pool declarations to read_mostly 2021-04-10 19:27:41 +02:00
hq_interop.c MINOR: quic: Non checked returned value for cs_new() in hq_interop_decode_qcs() 2022-02-15 17:23:44 +01:00
http.c MINOR: http: Add 422-Unprocessable-Content error message 2021-09-28 16:21:25 +02:00
http_acl.c CLEANUP: acl: don't reference the generic pattern deletion function anymore 2020-11-05 19:27:09 +01:00
http_act.c MINOR: http-rules: Add capture action to http-after-response ruleset 2021-12-07 19:04:33 +01:00
http_ana.c BUG/MAJOR: http/htx: prevent unbounded loop in http_manage_server_side_cookies 2022-02-16 14:42:13 +01:00
http_client.c BUG/MEDIUM: httpclient: limit transfers to the maximum available room 2022-02-18 17:32:12 +01:00
http_conv.c BUG/MINOR threads: Use get_(local|gm)time instead of (local|gm)time 2021-08-30 06:14:32 +02:00
http_fetch.c CLEANUP: Apply ist.cocci 2021-11-08 12:08:26 +01:00
http_htx.c CLEANUP: Apply ist.cocci 2021-11-08 12:08:26 +01:00
http_rules.c BUG/MEDIUM: sample: Cumulate frontend and backend sample validity flags 2021-10-15 14:12:19 +02:00
htx.c BUG/MEDIUM: htx: Adjust length to add DATA block in an empty HTX buffer 2022-01-13 09:34:22 +01:00
init.c CLEANUP: lists/tree-wide: rename some list operations to avoid some confusion 2021-04-21 09:20:17 +02:00
jwt.c BUG/MINOR: jwt: Memory leak if same key is used in multiple jwt_verify calls 2022-02-15 20:08:20 +01:00
lb_chash.c MINOR: server: replace the pendconns-related stuff with a struct queue 2021-06-22 18:43:14 +02:00
lb_fas.c MINOR: server: replace the pendconns-related stuff with a struct queue 2021-06-22 18:43:14 +02:00
lb_fwlc.c BUG/MEDIUM: leastconn: fix rare possibility of divide by zero 2021-09-22 07:24:02 +02:00
lb_fwrr.c CLEANUP: assorted typo fixes in the code and comments 2021-08-16 12:37:59 +02:00
lb_map.c MINOR: server: replace the pendconns-related stuff with a struct queue 2021-06-22 18:43:14 +02:00
listener.c BUG/MEDIUM: listener: read-lock the listener during accept() 2022-02-01 16:51:55 +01:00
log.c BUG/MAJOR: segfault using multiple log forward sections. 2021-12-01 15:21:56 +01:00
lru.c DEBUG: lru: use a xorshift generator in the testing code 2022-01-27 16:28:10 +01:00
mailers.c BUG/MINOR: mailers: negotiate SMTP, not ESMTP 2022-02-17 15:45:59 +01:00
map.c MINOR: map/acl: print the count of all the map/acl entries in "show map/acl" 2021-05-25 08:44:45 +02:00
mjson.c MINOR: sample: converter: Add mjson library. 2021-04-15 17:05:38 +02:00
mqtt.c CLEANUP: Apply ist.cocci 2021-11-05 07:48:38 +01:00
mux_fcgi.c BUILD: mux_fcgi: avoid aliasing of a const struct in traces 2022-01-28 19:04:02 +01:00
mux_h1.c BUG/MEDIUM: mux-h1: Don't wake h1s if mux is blocked on lack of output buffer 2022-02-21 16:05:47 +01:00
mux_h2.c BUG/MINOR: mux-h2: update the session's idle delay before creating the stream 2022-02-16 14:42:30 +01:00
mux_pt.c MINOR: stream-int: Notify mux when the buffer is not stuck when calling rcv_buf 2021-09-23 16:25:47 +02:00
mux_quic.c MINOR: mux-quic: fix a possible null dereference in qc_timeout_task 2022-02-21 10:05:16 +01:00
mworker-prog.c BUILD: mworker: include tools.h for platforms without unsetenv() 2022-01-28 19:04:02 +01:00
mworker.c MINOR: mworker: allocate and initialize a mworker_proc 2022-01-28 23:52:36 +01:00
namespace.c REORG: include: move the error reporting functions to from log.h to errors.h 2020-06-11 10:18:59 +02:00
pattern.c CLEANUP: Add haproxy/xxhash.h to avoid modifying import/xxhash.h 2021-09-11 19:58:45 +02:00
payload.c BUILD: payload: include tools.h in payload.c 2021-05-08 13:55:40 +02:00
peers.c BUG/MEDIUM: peers: properly skip conn_cur from incoming messages 2021-12-24 13:48:39 +01:00
pipe.c CLEANUP: atomic/tree-wide: replace single increments/decrements with inc/dec 2021-04-07 18:18:37 +02:00
pool.c DEBUG: pools: replace the link pointer with the caller's address on pool_free() 2022-02-14 20:10:43 +01:00
proto_quic.c MINOR: quic: Move quic_rxbuf_pool pool out of xprt part 2022-02-15 17:33:21 +01:00
proto_sockpair.c MINOR: protocols: add a new protocol type selector 2021-10-27 17:05:36 +02:00
proto_tcp.c BUILD: tree-wide: avoid warnings caused by redundant checks of obj_types 2021-12-06 09:11:47 +01:00
proto_udp.c MINOR: protocols: add a new protocol type selector 2021-10-27 17:05:36 +02:00
proto_uxdg.c MINOR: protocols: add a new protocol type selector 2021-10-27 17:05:36 +02:00
proto_uxst.c BUILD: tree-wide: avoid warnings caused by redundant checks of obj_types 2021-12-06 09:11:47 +01:00
protocol.c MINOR: protocols: make use of the protocol type to select the protocol 2021-10-27 17:31:20 +02:00
proxy.c MINOR: listener: define per-thr struct 2022-01-26 16:13:54 +01:00
qpack-dec.c MINOR: qpack: fix typo in trace 2022-02-15 11:08:17 +01:00
qpack-enc.c MINOR: h3/qpack: fix gcc11 warnings 2021-11-08 08:59:30 +01:00
qpack-tbl.c MINOR: qpack: fix wrong comment 2021-09-23 15:27:25 +02:00
queue.c BUG/MEDIUM: backend: fix possible sockaddr leak on redispatch 2021-12-24 11:50:01 +01:00
quic_cc.c MINOR: quic: Import C source code files for QUIC protocol. 2020-12-23 11:57:26 +01:00
quic_cc_newreno.c MINOR: quic: Wrong traces after rework 2022-01-04 17:30:00 +01:00
quic_frame.c MINOR: quic: Possible frame parsers array overrun 2022-02-15 17:33:21 +01:00
quic_sock.c MINOR: quic: EINTR error ignored 2022-02-14 15:20:54 +01:00
quic_tls.c MINOR: quic: implement Retry TLS AEAD tag generation 2022-01-12 11:08:48 +01:00
raw_sock.c CLEANUP: tree-wide: remove unneeded include time.h in ~20 files 2021-10-07 01:41:14 +02:00
regex.c OPTIM: regex: PCRE2 use JIT match when JIT optimisation occured. 2020-08-14 07:53:40 +02:00
resolvers.c BUG/MEDIUM: resolvers: Really ignore trailing dot in domain names 2022-01-28 17:56:18 +01:00
ring.c CLEANUP: lists/tree-wide: rename some list operations to avoid some confusion 2021-04-21 09:20:17 +02:00
sample.c BUG/MEDIUM: sample: Fix memory leak in sample_conv_jwt_member_query 2021-12-03 09:03:55 +01:00
server.c BUG/MEDIUM: server: avoid changing healthcheck ctx with set server ssl 2022-01-18 12:05:17 +01:00
server_state.c BUILD: server-state: avoid using not-so-portable isblank() 2022-01-28 19:04:02 +01:00
session.c MINOR: session: Rely on client source address at session level to log error 2021-10-27 11:34:21 +02:00
sha1.c BUILD: use inttypes.h instead of stdint.h 2019-04-01 07:44:56 +02:00
shctx.c MINOR: shctx: add a few BUG_ON() for consistency checks 2021-11-19 19:25:13 +01:00
signal.c CLEANUP: lists/tree-wide: rename some list operations to avoid some confusion 2021-04-21 09:20:17 +02:00
sink.c BUG/MINOR: sink: Use the right field in appctx context in release callback 2022-01-28 17:56:18 +01:00
slz.c IMPORT: slz: use the correct CRC32 instruction when running in 32-bit mode 2021-12-06 09:14:20 +01:00
sock.c MINOR: sock: move the unused socket cleaning code into its own function 2022-01-28 19:04:02 +01:00
sock_inet.c MEDIUM: listeners: split the thread mask between receiver and bind_conf 2021-10-14 21:27:48 +02:00
sock_unix.c MEDIUM: listeners: split the thread mask between receiver and bind_conf 2021-10-14 21:27:48 +02:00
ssl_ckch.c BUG/MINOR: ssl: Add missing return value check in ssl_ocsp_response_print 2022-02-18 09:57:51 +01:00
ssl_crtlist.c MEDIUM: ssl: Chain ckch instances in ca-file entries 2021-05-17 10:50:24 +02:00
ssl_sample.c MINOR: ssl: Use high level OpenSSL APIs in sha2 converter 2022-02-09 11:15:44 +01:00
ssl_sock.c BUG/MINOR: ssl: Missing return value check in ssl_ocsp_response_print 2022-02-18 09:58:04 +01:00
ssl_utils.c MINOR: sample: Expose SSL captures using new fetchers 2021-08-26 19:48:34 +02:00
stats.c MINOR: promex: backend aggregated server check status 2021-11-09 10:51:08 +01:00
stick_table.c BUG/MINOR: stick-table/cli: Check for invalid ipv6 key 2021-11-15 09:17:27 +01:00
stream.c BUG/MINOR: stream: make the call_rate only count the no-progress calls 2022-01-20 18:56:57 +01:00
stream_interface.c BUILD: tree-wide: avoid warnings caused by redundant checks of obj_types 2021-12-06 09:11:47 +01:00
task.c BUG/MAJOR: sched: prevent rare concurrent wakeup of multi-threaded tasks 2022-02-14 20:10:43 +01:00
tcp_act.c MINOR: tcp-act: Add set-src/set-src-port for "tcp-request content" rules 2021-10-27 11:35:59 +02:00
tcp_rules.c MEDIUM: tcp-rules: Eval TCP rules defined in defaults sections 2021-10-15 14:12:19 +02:00
tcp_sample.c MINOR: tcp-sample: Add samples to get original info about client connection 2021-10-27 11:35:59 +02:00
tcpcheck.c CLEANUP: Apply ist.cocci 2021-11-08 12:08:26 +01:00
thread.c MINOR: threads: add a new function to resolve config groups and masks 2021-10-08 17:22:26 +02:00
time.c REORG: time: move time-keeping code and variables to clock.c 2021-10-08 17:22:26 +02:00
tools.c BUG/MINOR: tools: url2sa reads ipv4 too far 2022-02-18 16:32:04 +01:00
trace.c MINOR: trace: add quic_conn argument definition 2021-12-21 15:53:19 +01:00
uri_auth.c CLEANUP: Compare the return value of XXXcmp() functions with zero 2021-01-04 10:09:02 +01:00
uri_normalizer.c MINOR: uri_normalizer: Add fragment-encode normalizer 2021-05-11 17:24:32 +02:00
vars.c BUILD: vars: avoid overlapping field initialization 2022-01-28 19:04:02 +01:00
version.c BUILD: Fix build by including haproxy/global.h 2020-06-16 23:36:04 +02:00
wdt.c REORG: thread/sched: move the thread_info flags to the thread_ctx 2021-10-08 17:22:26 +02:00
xprt_handshake.c MEDIUM: connections: Implement a start() method for xprt_handshake. 2021-03-19 15:33:04 +01:00
xprt_quic.c MINOR: quic: Move quic_rxbuf_pool pool out of xprt part 2022-02-15 17:33:21 +01:00