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.
diff --git a/include/proto/connection.h b/include/proto/connection.h
index dba7fca..2111f67 100644
--- a/include/proto/connection.h
+++ b/include/proto/connection.h
@@ -616,6 +616,7 @@
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 @@
}
}
+/* 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 @@
tasklet_free(cs->wait_list.task);
cs_drop_rxbuf(cs);
+ cs_drop_txbuf(cs);
pool_free(pool_head_connstream, cs);
}
diff --git a/include/types/connection.h b/include/types/connection.h
index 83c6bd1..cf5dbb6 100644
--- a/include/types/connection.h
+++ b/include/types/connection.h
@@ -373,6 +373,7 @@
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 */