summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-28 20:03:51 +0200
committerMax Kellermann <max@duempel.org>2008-08-28 20:03:51 +0200
commit7774cd27749357dd898852ddd99e428c59b67d0b (patch)
treef17dd2e4d8ed40f438e9522e431bc479178779d7
parent4448b17e2ec03f5544ab7076571aa661ff3e6ec0 (diff)
client: moved code to client_defer_output()
Split the large function client_write_output() into two parts; this is the first code moving patch.
-rw-r--r--src/client.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/src/client.c b/src/client.c
index b646a1b67..da1358e54 100644
--- a/src/client.c
+++ b/src/client.c
@@ -719,33 +719,40 @@ int client_print(int fd, const char *buffer, size_t buflen)
return 0;
}
+static void client_defer_output(struct client *client,
+ const void *data, size_t length)
+{
+ struct sllnode *buf = client->deferred_send;
+
+ assert(client->deferred_send != NULL);
+
+ 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,
+ (unsigned long)client->deferred_bytes,
+ (unsigned long)client_max_output_buffer_size);
+ /* cause client to close */
+ client->expired = 1;
+ } else {
+ while (buf->next)
+ buf = buf->next;
+ buf->next = new_sllnode(data, length);
+ }
+}
+
static void client_write_output(struct client *client)
{
ssize_t ret;
- struct sllnode *buf;
if (client->expired || !client->send_buf_used)
return;
- if ((buf = client->deferred_send)) {
- client->deferred_bytes += sizeof(struct sllnode)
- + client->send_buf_used;
- 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,
- (unsigned long)client->deferred_bytes,
- (unsigned long)client_max_output_buffer_size);
- /* cause client to close */
- client->expired = 1;
- } else {
- while (buf->next)
- buf = buf->next;
- buf->next = new_sllnode(client->send_buf,
- client->send_buf_used);
- }
- } else {
+ 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) {