Commit 7774cd27 authored by Max Kellermann's avatar Max Kellermann

client: moved code to client_defer_output()

Split the large function client_write_output() into two parts; this is the first code moving patch.
parent 4448b17e
......@@ -719,19 +719,15 @@ int client_print(int fd, const char *buffer, size_t buflen)
return 0;
}
static void client_write_output(struct client *client)
static void client_defer_output(struct client *client,
const void *data, size_t length)
{
ssize_t ret;
struct sllnode *buf;
struct sllnode *buf = client->deferred_send;
if (client->expired || !client->send_buf_used)
return;
assert(client->deferred_send != NULL);
if ((buf = client->deferred_send)) {
client->deferred_bytes += sizeof(struct sllnode)
+ client->send_buf_used;
if (client->deferred_bytes >
client_max_output_buffer_size) {
client->deferred_bytes += sizeof(struct sllnode) + length;
if (client->deferred_bytes > client_max_output_buffer_size) {
ERROR("client %i: output buffer size (%lu) is "
"larger than the max (%lu)\n",
client->num,
......@@ -742,10 +738,21 @@ static void client_write_output(struct client *client)
} else {
while (buf->next)
buf = buf->next;
buf->next = new_sllnode(client->send_buf,
client->send_buf_used);
buf->next = new_sllnode(data, length);
}
} else {
}
static void client_write_output(struct client *client)
{
ssize_t ret;
if (client->expired || !client->send_buf_used)
return;
if (client->deferred_send != NULL)
client_defer_output(client, client->send_buf,
client->send_buf_used);
else {
if ((ret = write(client->fd, client->send_buf,
client->send_buf_used)) < 0) {
if (errno == EAGAIN || errno == EINTR) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment