Mercurial > dovecot > core-2.2
changeset 12881:b3392b09623a
imapc: Make sure we wait for SELECT/APPEND/COPY commands to finish.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 04 Apr 2011 14:12:01 +0300 |
parents | 6a9348fb2253 |
children | dc0d02efe64b |
files | src/lib-storage/index/imapc/imapc-save.c src/lib-storage/index/imapc/imapc-storage.c |
diffstat | 2 files changed, 8 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-save.c Mon Apr 04 14:09:11 2011 +0300 +++ b/src/lib-storage/index/imapc/imapc-save.c Mon Apr 04 14:12:01 2011 +0300 @@ -185,11 +185,13 @@ input = i_stream_create_fd(ctx->fd, IO_BLOCK_SIZE, FALSE); sctx.ctx = ctx; + sctx.ret = -2; imapc_client_cmdf(ctx->mbox->storage->client, imapc_save_callback, &sctx, "APPEND %s%1s%1s %p", ctx->mbox->box.name, flags, internaldate, input); i_stream_unref(&input); - imapc_client_run(ctx->mbox->storage->client); + while (sctx.ret == -2) + imapc_client_run(ctx->mbox->storage->client); return sctx.ret; } @@ -334,8 +336,8 @@ imapc_copy_callback, &sctx, "UID COPY %u %s", mail->uid, _t->box->name); - imapc_client_run(src_mbox->storage->client); - i_assert(sctx.ret != -2); + while (sctx.ret == -2) + imapc_client_run(src_mbox->storage->client); ctx->finished = TRUE; return sctx.ret; }
--- a/src/lib-storage/index/imapc/imapc-storage.c Mon Apr 04 14:09:11 2011 +0300 +++ b/src/lib-storage/index/imapc/imapc-storage.c Mon Apr 04 14:12:01 2011 +0300 @@ -323,13 +323,14 @@ mbox->opening = TRUE; ctx.mbox = mbox; - ctx.ret = -1; + ctx.ret = -2; mbox->client_box = imapc_client_mailbox_open(mbox->storage->client, box->name, FALSE, imapc_mailbox_open_callback, &ctx, mbox); - imapc_client_run(mbox->storage->client); + while (ctx.ret == -2) + imapc_client_run(mbox->storage->client); mbox->opening = FALSE; if (ctx.ret < 0) { mailbox_close(box);