# HG changeset patch # User Timo Sirainen # Date 1301915521 -10800 # Node ID b3392b09623a52e0a2402b41f44407998b7348bb # Parent 6a9348fb225303bdd8e7be0942bcf8fe6b4dd4e3 imapc: Make sure we wait for SELECT/APPEND/COPY commands to finish. diff -r 6a9348fb2253 -r b3392b09623a src/lib-storage/index/imapc/imapc-save.c --- 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; } diff -r 6a9348fb2253 -r b3392b09623a src/lib-storage/index/imapc/imapc-storage.c --- 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);