mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-02 10:12:03 +00:00
MEDIUM: stconn: Be sure to always be able to unblock a SC that needs room
When sc_need_room() is called, the caller cannot request more free space than a minimum value to be sure it is always possible to unblock it. it is a safety guard to not freeze any SC on NEED_ROOM condition. At worse it will lead to some wakeups un excess at the edge. To keep things simple, the following minimum is used: (global.tune.bufsize - global.tune.maxrewrite - sizeof(struct htx))
This commit is contained in:
parent
d6f0557deb
commit
e59f7583ee
@ -24,6 +24,7 @@
|
||||
|
||||
#include <haproxy/api.h>
|
||||
#include <haproxy/connection.h>
|
||||
#include <haproxy/htx-t.h>
|
||||
#include <haproxy/obj_type.h>
|
||||
#include <haproxy/stconn-t.h>
|
||||
|
||||
@ -444,12 +445,13 @@ static inline void sc_have_room(struct stconn *sc)
|
||||
* SE_FL_HAVE_NO_DATA to be called again as soon as SC_FL_NEED_ROOM is cleared.
|
||||
*
|
||||
* The caller is responsible to specified the amount of free space required to
|
||||
* progress.
|
||||
* progress. However, to be sure the SC can be unblocked a max value cannot be
|
||||
* eceeded : (BUFSIZE - RESERVE - HTX OVERHEAD)
|
||||
*/
|
||||
static inline void sc_need_room(struct stconn *sc, ssize_t room_needed)
|
||||
{
|
||||
sc->flags |= SC_FL_NEED_ROOM;
|
||||
sc->room_needed = room_needed;
|
||||
sc->room_needed = MIN(global.tune.bufsize - global.tune.maxrewrite - sizeof(struct htx), room_needed);
|
||||
}
|
||||
|
||||
/* The stream endpoint indicates that it's ready to consume data from the
|
||||
|
Loading…
Reference in New Issue
Block a user