haproxy/src
Willy Tarreau 4b3f27b67f BUG/MINOR: haproxy/threads: try to make all threads leave together
There's a small issue with soft stop combined with the incoming
connection load balancing. A thread may dispatch a connection to
another one at the moment stopping=1 is set, and the second one could
stop by seeing (jobs - unstoppable_jobs) == 0 in run_poll_loop(),
without ever picking these connections from the queue. This is
visible in that it may occasionally cause a connection drop on
reload since no remaining thread will ever pick that connection
anymore.

In order to address this, this patch adds a stopping_thread_mask
variable by which threads acknowledge their willingness to stop
when their runqueue is empty. And all threads will only stop at
this moment, so that if finally some late work arrives in the
thread's queue, it still has a chance to process it.

This should be backported to 2.1 and 2.0.
2020-03-12 19:17:19 +01:00
..
51d.c BUG/MEDIUM: random: implement a thread-safe and process-safe PRNG 2020-03-08 10:09:02 +01:00
acl.c MINOR: sample: make sample_parse_expr() able to return an end pointer 2020-02-14 19:02:06 +01:00
action.c MINOR: tcp-rules: Make tcp-request capture a custom action 2020-01-20 15:18:45 +01:00
activity.c
applet.c BUG/MEDIUM: applet: always check a fast running applet's activity before killing 2019-10-11 16:05:57 +02:00
arg.c BUG/MINOR: arg: don't reject missing optional args 2020-02-28 16:41:29 +01:00
auth.c
backend.c MINOR: backend: use a single call to ha_random32() for the random LB algo 2020-03-08 17:31:39 +01:00
base64.c
buffer.c BUG/MINOR: buffers: MT_LIST_DEL_SAFE() expects the temporary pointer. 2020-03-10 17:44:40 +01:00
cache.c MINOR: cache/filters: Initialize the cache filter when stream is created 2020-03-06 15:36:04 +01:00
calltrace.c
cfgparse-global.c MINOR: config: mark global.debug as deprecated 2020-02-25 11:28:58 +01:00
cfgparse-listen.c MINOR: proxy: Make header_unique_id a struct ist 2020-03-05 19:58:22 +01:00
cfgparse.c MINOR: servers: Kill priv_conns. 2020-03-11 19:20:01 +01:00
channel.c BUG/MINOR: channel: inject output data at the end of output 2020-01-07 10:51:15 +01:00
checks.c BUG/MINOR: checks/threads: use ha_random() and not rand() 2020-03-08 17:56:47 +01:00
chunk.c BUILD: general: always pass unsigned chars to is* functions 2020-02-25 08:16:33 +01:00
cli.c MINOR: cli: make "show fd" rely on resolve_sym_name() 2020-03-03 18:19:04 +01:00
compression.c
connection.c CLEANUP: proxy_protocol: Use size_t when parsing TLVs 2020-03-06 11:16:19 +01:00
da.c
debug.c MINOR: debug: add CLI command "debug dev write" to write an arbitrary size 2020-03-05 17:20:15 +01:00
dict.c
dns.c BUG/MINOR: dns: ignore trailing dot 2020-02-28 10:26:29 +01:00
ev_epoll.c CLEANUP: remove support for USE_MY_EPOLL 2020-03-10 07:08:10 +01:00
ev_evports.c BUILD: remove obsolete support for -mregparm / USE_REGPARM 2020-02-25 07:41:47 +01:00
ev_kqueue.c BUILD: remove obsolete support for -mregparm / USE_REGPARM 2020-02-25 07:41:47 +01:00
ev_poll.c BUILD: remove obsolete support for -mregparm / USE_REGPARM 2020-02-25 07:41:47 +01:00
ev_select.c BUILD: remove obsolete support for -mregparm / USE_REGPARM 2020-02-25 07:41:47 +01:00
fcgi-app.c CLEANUP: Use isttest() and istfree() 2020-03-05 19:52:07 +01:00
fcgi.c BUILD: general: always pass unsigned chars to is* functions 2020-02-25 08:16:33 +01:00
fd.c CLEANUP: fd: use a union in fd_rm_from_fd_list() to shut aliasing warnings 2020-02-25 09:25:53 +01:00
filters.c BUG/MINOR: filters: Forward everything if no data filters are called 2020-03-06 14:12:59 +01:00
flt_http_comp.c MINOR: compression/filters: Initialize the comp filter when stream is created 2020-03-06 15:36:04 +01:00
flt_spoe.c MINOR: tools: add a generic function to generate UUIDs 2020-03-08 18:04:16 +01:00
flt_trace.c BUG/MEDIUM: random: implement a thread-safe and process-safe PRNG 2020-03-08 10:09:02 +01:00
freq_ctr.c
frontend.c
h1_htx.c MEDIUM: h1-htx: Add HTX EOM block when the message is in H1_MSG_DONE state 2019-12-11 16:46:16 +01:00
h1.c CLEANUP: http/h1: rely on HA_UNALIGNED_LE instead of checking for CPU families 2020-02-21 16:32:57 +01:00
h2.c BUG/MINOR: h2: reject again empty :path pseudo-headers 2020-02-26 13:56:24 +01:00
haproxy.c BUG/MINOR: haproxy/threads: try to make all threads leave together 2020-03-12 19:17:19 +01:00
hash.c BUG/MAJOR: hashes: fix the signedness of the hash inputs 2020-01-16 08:23:42 +01:00
hathreads.c BUILD/MEDIUM: threads: rename thread_info struct to ha_thread_info 2019-10-17 07:15:17 +02:00
hlua_fcn.c CLEANUP: lua: fix aliasing issues in the address matching code 2020-02-25 10:24:51 +01:00
hlua.c MINOR: servers: Kill priv_conns. 2020-03-11 19:20:01 +01:00
hpack-dec.c CLEANUP: Use isttest() and istfree() 2020-03-05 19:52:07 +01:00
hpack-enc.c
hpack-huff.c
hpack-tbl.c
http_acl.c
http_act.c BUG/MINOR: http-rules: Fix a typo in the reject action function 2020-03-06 15:36:04 +01:00
http_ana.c BUG/MINOR: http-rules: Abort transaction when a redirect is applied on response 2020-03-06 15:44:38 +01:00
http_conv.c MINOR: sample: add us/ms support to date/http_date 2019-10-31 08:47:31 +01:00
http_fetch.c MEDIUM: stream: Make the unique_id member of struct stream a struct ist 2020-03-05 20:21:58 +01:00
http_htx.c CLEANUP: Use isttest() and istfree() 2020-03-05 19:52:07 +01:00
http_rules.c MEDIUM: http: Add a ruleset evaluated on all responses just before forwarding 2020-02-06 14:55:34 +01:00
http.c MINOR: ist: Add IST_NULL macro 2020-03-05 19:52:07 +01:00
htx.c MINOR: htx: Use htx_find_offset() to truncate an HTX message 2020-03-06 14:12:59 +01:00
lb_chash.c
lb_fas.c
lb_fwlc.c
lb_fwrr.c
lb_map.c
listener.c BUG/MINOR: listener/mq: do not dispatch connections to remote threads when stopping 2020-03-12 19:10:29 +01:00
log.c MEDIUM: stream: Make the unique_id member of struct stream a struct ist 2020-03-05 20:21:58 +01:00
lru.c
mailers.c
map.c
memory.c BUG/MEDIUM: pools: Always update free_list in pool_gc(). 2020-03-12 19:07:10 +01:00
mux_fcgi.c BUG/MEDIUM: connections: Don't assume the connection has a valid session. 2020-03-12 15:39:37 +01:00
mux_h1.c BUG/MEDIUM: connections: Don't assume the connection has a valid session. 2020-03-12 15:39:37 +01:00
mux_h2.c MINOR: servers: Kill priv_conns. 2020-03-11 19:20:01 +01:00
mux_pt.c MINOR: connection: remove checks for CO_FL_HANDSHAKE before I/O 2020-01-23 17:30:42 +01:00
mworker-prog.c
mworker.c BUG/MINOR: mworker: properly pass SIGTTOU/SIGTTIN to workers 2019-12-11 14:26:53 +01:00
namespace.c BUG/MINOR: namespace: avoid closing fd when socket failed in my_socketat 2020-02-14 04:23:08 +01:00
pattern.c BUG/MEDIUM: random: implement a thread-safe and process-safe PRNG 2020-03-08 10:09:02 +01:00
payload.c
peers.c BUG/MEDIUM: random: implement a thread-safe and process-safe PRNG 2020-03-08 10:09:02 +01:00
pipe.c BUG/MEDIUM: pipe/thread: fix atomicity of pipe counters 2020-01-30 09:15:37 +01:00
proto_sockpair.c MINOR: tcp/uxst/sockpair: only ask for I/O when really waiting for a connect() 2020-03-04 19:29:12 +01:00
proto_tcp.c BUG/MINOR: rules: Increment be_counters if backend is assigned for a silent-drop 2020-03-06 15:36:04 +01:00
proto_udp.c BUG/MEDIUM: proto_udp/threads: recv() and send() must not be exclusive. 2019-12-10 19:09:15 +01:00
proto_uxst.c MINOR: tcp/uxst/sockpair: only ask for I/O when really waiting for a connect() 2020-03-04 19:29:12 +01:00
protocol.c
proxy.c BUG/MEDIUM: connections: Don't assume the connection has a valid session. 2020-03-12 15:39:37 +01:00
queue.c MINOR: sample: make sample_parse_expr() able to return an end pointer 2020-02-14 19:02:06 +01:00
raw_sock.c CLEANUP: remove support for USE_MY_SPLICE 2020-03-10 07:23:41 +01:00
regex.c
ring.c MINOR: ring: make the parse function automatically set the handler/release 2019-11-15 15:48:12 +01:00
sample.c MINOR: tools: add a generic function to generate UUIDs 2020-03-08 18:04:16 +01:00
server.c BUILD: general: always pass unsigned chars to is* functions 2020-02-25 08:16:33 +01:00
session.c MEDIUM: connection: use CO_FL_WAIT_XPRT more consistently than L4/L6/HANDSHAKE 2020-01-23 16:34:26 +01:00
sha1.c
shctx.c BUG/MEDIUM: shctx: make sure to keep all blocks aligned 2020-02-21 13:45:58 +01:00
signal.c
sink.c MINOR: ring: make the parse function automatically set the handler/release 2019-11-15 15:48:12 +01:00
ssl_sock.c CLEANUP: ssl: separate the directory loading in a new function 2020-03-10 15:55:22 +01:00
standard.c BUG/MEDIUM: random: align the state on 2*64 bits for ARM64 2020-03-12 00:34:22 +01:00
stats.c BUILD: general: always pass unsigned chars to is* functions 2020-02-25 08:16:33 +01:00
stick_table.c CLEANUP: stick-tables: use read_u32() to display a node's key 2020-02-25 09:41:22 +01:00
stream_interface.c MEDIUM: connection: remove the intermediary polling state from the connection 2020-02-21 11:21:12 +01:00
stream.c MEDIUM: stream: Make the unique_id member of struct stream a struct ist 2020-03-05 20:21:58 +01:00
task.c MINOR: task: export run_tasks_from_list 2020-03-03 15:26:10 +01:00
tcp_rules.c MINOR: sample: make sample_parse_expr() able to return an end pointer 2020-02-14 19:02:06 +01:00
time.c BUILD: remove obsolete support for -mregparm / USE_REGPARM 2020-02-25 07:41:47 +01:00
trace.c BUG/MEDIUM: trace: fix a typo causing an incorrect startup error 2019-11-25 19:47:22 +01:00
uri_auth.c MINOR: stats: replace the ST_* uri_auth flags with STAT_* 2019-10-10 11:30:07 +02:00
vars.c BUILD: general: always pass unsigned chars to is* functions 2020-02-25 08:16:33 +01:00
version.c MINOR: version: make the version strings variables, not constants 2019-10-16 09:56:57 +02:00
wdt.c BUILD: wdt: only test for SI_TKILL when compiled with thread support 2020-03-10 09:26:17 +01:00
wurfl.c BUG/MINOR: WURFL: fix send_log() function arguments 2019-10-15 10:47:31 +02:00
xprt_handshake.c BUG/MINOR: connection/debug: do not enforce !event_type on subscribe() anymore 2020-03-05 07:46:33 +01:00
xxhash.c