]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Message bodies were saved only partially.
authorTimo Sirainen <tss@iki.fi>
Fri, 30 Oct 2009 17:52:24 +0000 (13:52 -0400)
committerTimo Sirainen <tss@iki.fi>
Fri, 30 Oct 2009 17:52:24 +0000 (13:52 -0400)
--HG--
branch : HEAD

src/dsync/dsync-brain-msgs-new.c
src/dsync/dsync-proxy-client.c

index d09de600d9217c3ff6537c97d302355a8756ba70..c11023ea6f4ea02404f45160c444c9a89319d6fa 100644 (file)
@@ -26,19 +26,11 @@ static void msg_get_callback(enum dsync_msg_get_result result,
 {
        struct dsync_brain_msg_save_context *ctx = context;
        struct istream *input;
-       const unsigned char *idata;
-       size_t size;
 
        switch (result) {
        case DSYNC_MSG_GET_RESULT_SUCCESS:
                input = data->input;
                dsync_worker_msg_save(ctx->iter->worker, ctx->msg, data);
-
-               /* if input is coming from proxy, we'll need to read the input
-                  until EOF or we'll start treating the input as commands.
-                  make sure saving read everything. */
-               while ((i_stream_read_data(input, &idata, &size, 0)) > 0)
-                       i_stream_skip(input, size);
                i_stream_unref(&input);
                break;
        case DSYNC_MSG_GET_RESULT_EXPUNGED:
index 8c9c64814b9c53ec70eeb39d3e328b60958f0a92..940ce2438a2a3fbb1b23a7a9d7e60918290cebd8 100644 (file)
@@ -101,11 +101,20 @@ proxy_client_worker_read_line(struct proxy_client_dsync_worker *worker,
 static void
 proxy_client_worker_msg_get_done(struct proxy_client_dsync_worker *worker)
 {
+       struct istream *input = worker->msg_get_data.input;
+       const unsigned char *data;
+       size_t size;
+
        i_assert(worker->io == NULL);
 
        worker->msg_get_data.input = NULL;
        worker->io = io_add(worker->fd_in, IO_READ,
                            proxy_client_worker_input, worker);
+
+       /* we'll need to read the input until EOF or we'll start treating the
+          input as commands. make sure saving read everything. */
+       while ((i_stream_read_data(input, &data, &size, 0)) > 0)
+               i_stream_skip(input, size);
 }
 
 static bool