mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
MINOR: conn_stream: add an tx buffer to the conn_stream
To be symmetrical with the recv() part, we no handle retryable and partial transmission using a intermediary buffer in the conn_stream. For now it's only set to BUF_NULL and never allocated nor used. It cannot yet be used as-is without risking to lose data on close since conn_streams need to be orphaned for this.
This commit is contained in:
parent
2bf88c05d0
commit
3c51802fb9
@ -616,6 +616,7 @@ static inline void cs_init(struct conn_stream *cs, struct connection *conn)
|
||||
LIST_INIT(&cs->send_wait_list);
|
||||
cs->conn = conn;
|
||||
cs->rxbuf = BUF_NULL;
|
||||
cs->txbuf = BUF_NULL;
|
||||
}
|
||||
|
||||
/* Initializes all required fields for a new connection. Note that it does the
|
||||
@ -687,6 +688,17 @@ static inline void cs_drop_rxbuf(struct conn_stream *cs)
|
||||
}
|
||||
}
|
||||
|
||||
/* Releases the conn_stream's tx buf if it exists. The buffer is automatically
|
||||
* replaced with a pointer to the empty buffer.
|
||||
*/
|
||||
static inline void cs_drop_txbuf(struct conn_stream *cs)
|
||||
{
|
||||
if (b_size(&cs->txbuf)) {
|
||||
b_free(&cs->txbuf);
|
||||
offer_buffers(NULL, tasks_run_queue);
|
||||
}
|
||||
}
|
||||
|
||||
/* Releases a conn_stream previously allocated by cs_new(), as well as any
|
||||
* buffer it would still hold.
|
||||
*/
|
||||
@ -696,6 +708,7 @@ static inline void cs_free(struct conn_stream *cs)
|
||||
tasklet_free(cs->wait_list.task);
|
||||
|
||||
cs_drop_rxbuf(cs);
|
||||
cs_drop_txbuf(cs);
|
||||
pool_free(pool_head_connstream, cs);
|
||||
}
|
||||
|
||||
|
@ -373,6 +373,7 @@ struct conn_stream {
|
||||
struct wait_list wait_list; /* We're in a wait list for send */
|
||||
struct list send_wait_list; /* list of tasks to wake when we're ready to send */
|
||||
struct buffer rxbuf; /* receive buffer, always valid (buf_empty or real buffer) */
|
||||
struct buffer txbuf; /* transmission buffer, always valid (buf_empty or real buffer) */
|
||||
void *data; /* pointer to upper layer's entity (eg: stream interface) */
|
||||
const struct data_cb *data_cb; /* data layer callbacks. Must be set before xprt->init() */
|
||||
void *ctx; /* mux-specific context */
|
||||
|
Loading…
x
Reference in New Issue
Block a user