Mercurial > dovecot > core-2.2
changeset 9883:87fed6f0bbfe HEAD
anvil: Recovered from my insanity and reverted changes to fifo reading code.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 06 Sep 2009 16:09:30 -0400 |
parents | 52027b59beb5 |
children | 38fbf201824c |
files | src/anvil/anvil-connection.c |
diffstat | 1 files changed, 12 insertions(+), 72 deletions(-) [+] |
line wrap: on
line diff
--- a/src/anvil/anvil-connection.c Sun Sep 06 15:47:46 2009 -0400 +++ b/src/anvil/anvil-connection.c Sun Sep 06 16:09:30 2009 -0400 @@ -24,8 +24,6 @@ struct istream *input; struct ostream *output; struct io *io; - unsigned char *fifo_inbuf; - size_t fifo_inbuf_size, fifo_inbuf_next; unsigned int version_received:1; unsigned int handshaked:1; @@ -34,61 +32,12 @@ struct anvil_connection *anvil_connections = NULL; -static const char * -anvil_connection_get_next_line(struct anvil_connection *conn) -{ - char *line, *p; - - line = (char *)conn->fifo_inbuf + conn->fifo_inbuf_next; - - p = strchr(line, '\n'); - if (p == NULL) - conn->fifo_inbuf_next = 0; - else { - *p = '\0'; - conn->fifo_inbuf_next = p - line + 1; - } - return line; -} - -static const char * -anvil_connection_fifo_read_line(struct anvil_connection *conn) -{ - ssize_t ret; - - if (conn->fifo_inbuf_next > 0) - return anvil_connection_get_next_line(conn); - - ret = read(conn->fd, conn->fifo_inbuf, conn->fifo_inbuf_size); - if (ret > 0) { - if (conn->fifo_inbuf[ret-1] != '\n') { - i_error("BUG: Client packet didn't end with LF"); - return NULL; - } - conn->fifo_inbuf[ret-1] = '\0'; - return anvil_connection_get_next_line(conn); - } - - if (ret == 0) { - /* disconnected */ - } else { - if (errno == EAGAIN) - return NULL; - i_error("read() failed: %m"); - } - anvil_connection_destroy(conn); - return NULL; -} - static const char *const * anvil_connection_next_line(struct anvil_connection *conn) { const char *line; - if (conn->input != NULL) - line = i_stream_next_line(conn->input); - else - line = anvil_connection_fifo_read_line(conn); + line = i_stream_next_line(conn->input); return line == NULL ? NULL : t_strsplit(line, "\t"); } @@ -153,17 +102,14 @@ struct anvil_connection *conn = context; const char *const *args, *error; - if (conn->input != NULL) { - switch (i_stream_read(conn->input)) { - case -2: - i_error("BUG: Anvil client connection sent too " - "much data"); - anvil_connection_destroy(conn); - return; - case -1: - anvil_connection_destroy(conn); - return; - } + switch (i_stream_read(conn->input)) { + case -2: + i_error("BUG: Anvil client connection sent too much data"); + anvil_connection_destroy(conn); + return; + case -1: + anvil_connection_destroy(conn); + return; } if (!conn->version_received) { @@ -197,13 +143,9 @@ conn = i_new(struct anvil_connection, 1); conn->fd = fd; - if (!fifo) { - conn->input = i_stream_create_fd(fd, MAX_INBUF_SIZE, FALSE); + conn->input = i_stream_create_fd(fd, MAX_INBUF_SIZE, FALSE); + if (!fifo) conn->output = o_stream_create_fd(fd, (size_t)-1, FALSE); - } else { - conn->fifo_inbuf_size = MAX_INBUF_SIZE; - conn->fifo_inbuf = i_malloc(conn->fifo_inbuf_size); - } conn->io = io_add(fd, IO_READ, anvil_connection_input, conn); conn->master = master; DLLIST_PREPEND(&anvil_connections, conn); @@ -215,13 +157,11 @@ DLLIST_REMOVE(&anvil_connections, conn); io_remove(&conn->io); - if (conn->input != NULL) - i_stream_destroy(&conn->input); + i_stream_destroy(&conn->input); if (conn->output != NULL) o_stream_destroy(&conn->output); if (close(conn->fd) < 0) i_error("close(anvil conn) failed: %m"); - i_free(conn->fifo_inbuf); i_free(conn); master_service_client_connection_destroyed(master_service);