mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-11 14:05:12 +00:00
eb406dc73c
Currently we have a problem. There are some cases where a sleeping applet is not woken up (eg: show sess during an injection). The reason is that the applet is marked WAIT_DATA and is not woken up when WAIT_ROOM leaves, because we wait for both flags to be cleared in order to call it. And if we wait for either flag, then we have the opposite situation, which is that we're not waiting for room in the output buffer so we're spinning calling the applet to do nothing. What is missing is an indication of what the applet needs. Since it only manipulates the WAIT_ROOM/WAIT_DATA which are overwritten later, that cannot work. In the case of connections, the problem doesn't happen because the connection maintains these extra states. Ideally we'd need to have similar states for each appctx and to store those information there. But it would be overcomplicated given that an applet doesn't exist alone without a stream-int, so we can safely put these information into the stream int and make the code simpler. With this patch we introduce two new flags in the stream interface : - SI_FL_WANT_PUT : the applet wants to put something into the buffer - SI_FL_WANT_GET : the applet wants to get something from the buffer We also have the new functions si_applet_{stop|want|cant}_{get|put} to make the code look similar to the connection code. For now these flags are not used yet. |
||
---|---|---|
.. | ||
acl.h | ||
applet.h | ||
arg.h | ||
auth.h | ||
backend.h | ||
channel.h | ||
checks.h | ||
compression.h | ||
connection.h | ||
cttproxy.h | ||
dumpstats.h | ||
fd.h | ||
freq_ctr.h | ||
frontend.h | ||
hdr_idx.h | ||
hlua.h | ||
lb_chash.h | ||
lb_fas.h | ||
lb_fwlc.h | ||
lb_fwrr.h | ||
lb_map.h | ||
listener.h | ||
log.h | ||
map.h | ||
obj_type.h | ||
pattern.h | ||
payload.h | ||
peers.h | ||
pipe.h | ||
port_range.h | ||
proto_http.h | ||
proto_tcp.h | ||
proto_uxst.h | ||
protocol.h | ||
proxy.h | ||
queue.h | ||
raw_sock.h | ||
sample.h | ||
server.h | ||
session.h | ||
shctx.h | ||
signal.h | ||
ssl_sock.h | ||
stick_table.h | ||
stream_interface.h | ||
stream.h | ||
task.h | ||
template.h |