]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MEDIUM: buffer: implement b_alloc_margin()
authorWilly Tarreau <w@1wt.eu>
Tue, 2 Dec 2014 12:54:01 +0000 (13:54 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 24 Dec 2014 22:47:32 +0000 (23:47 +0100)
commitf4718e8ec0ff33f4725291dd5d8ae0cd3c1869f5
treede19f592e1247a8d7cab7c6d329765116361f166
parent620bd6c88e3999b5a4b3b5c6fd8933ee47a1bc8b
MEDIUM: buffer: implement b_alloc_margin()

This function is used to allocate a buffer and ensure that we leave
some margin after it in the pool. The function is not obvious. While
we allocate only one buffer, we want to ensure that at least two remain
available after our allocation. The purpose is to ensure we'll never
enter a deadlock where all sessions allocate exactly one buffer, and
none of them will be able to allocate the second buffer needed to build
a response in order to release the first one.

We also take care of remaining fast in the the fast path by first
checking whether or not there is enough margin, in which case we only
rely on b_alloc_fast() which is guaranteed to succeed. Otherwise we
take the slow path using pool_refill_alloc().
include/common/buffer.h