mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 15:17:01 +02:00
MEDIUM: channel: allocate without queuing when retrying
Now when trying to allocate a channel buffer, we can check if we've been notified of availability via the producer stream connector callback, in which case we should not consult the queue, or if we're doing a first allocation and check the queue.
This commit is contained in:
parent
b5714b45e8
commit
5b8d27617f
@ -915,7 +915,14 @@ static inline int ci_space_for_replace(const struct channel *chn)
|
|||||||
*/
|
*/
|
||||||
static inline int channel_alloc_buffer(struct channel *chn, struct buffer_wait *wait)
|
static inline int channel_alloc_buffer(struct channel *chn, struct buffer_wait *wait)
|
||||||
{
|
{
|
||||||
if (b_alloc(&chn->buf, DB_CHANNEL) != NULL)
|
int force_noqueue;
|
||||||
|
|
||||||
|
/* If the producer has been notified of recent availability, we must
|
||||||
|
* not check the queue again.
|
||||||
|
*/
|
||||||
|
force_noqueue = !!(chn_prod(chn)->flags & SC_FL_HAVE_BUFF);
|
||||||
|
|
||||||
|
if (b_alloc(&chn->buf, DB_CHANNEL | (force_noqueue ? DB_F_NOQUEUE : 0)) != NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
b_requeue(DB_CHANNEL, wait);
|
b_requeue(DB_CHANNEL, wait);
|
||||||
|
Loading…
Reference in New Issue
Block a user