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);