Mercurial > dovecot > original-hg > dovecot-1.2
changeset 1225:8c85c03e0485 HEAD
cork the output before sending the ending IDLE replies.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 21 Feb 2003 16:28:45 +0200 |
parents | b661eb87bd26 |
children | c0783c50e47c |
files | src/imap/cmd-idle.c |
diffstat | 1 files changed, 18 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/cmd-idle.c Fri Feb 21 16:25:33 2003 +0200 +++ b/src/imap/cmd-idle.c Fri Feb 21 16:28:45 2003 +0200 @@ -3,6 +3,7 @@ #include "common.h" #include "ioloop.h" #include "istream.h" +#include "ostream.h" #include "commands.h" #include <stdlib.h> @@ -16,6 +17,8 @@ client->idle_to = NULL; } + o_stream_cork(client->output); + if (client->idle_expunge) { client_send_line(client, t_strdup_printf("* %u EXPUNGE", client->idle_expunge)); @@ -25,10 +28,13 @@ client->io = io_add(i_stream_get_fd(client->input), IO_READ, _client_input, client); - client->mailbox->auto_sync(client->mailbox, - mailbox_check_interval != 0 ? - MAILBOX_SYNC_NO_EXPUNGES : MAILBOX_SYNC_NONE, - mailbox_check_interval); + if (client->mailbox != NULL) { + client->mailbox->auto_sync(client->mailbox, + mailbox_check_interval != 0 ? + MAILBOX_SYNC_NO_EXPUNGES : + MAILBOX_SYNC_NONE, + mailbox_check_interval); + } client_sync_full(client); if (done_ok) @@ -36,6 +42,8 @@ else client_send_tagline(client, "BAD Expected DONE."); + o_stream_flush(client->output); + _client_reset_command(client); client->bad_counter = 0; } @@ -95,11 +103,9 @@ const char *str; unsigned int interval; - if (!client_verify_open_mailbox(client)) - return TRUE; - client->idle_expunge = 0; - if ((client_workarounds & WORKAROUND_OUTLOOK_IDLE) != 0) { + if ((client_workarounds & WORKAROUND_OUTLOOK_IDLE) != 0 && + client->mailbox != NULL) { client->idle_to = timeout_add((CLIENT_IDLE_TIMEOUT - 60) * 1000, idle_timeout, client); } @@ -109,7 +115,10 @@ if (interval == 0) interval = DEFAULT_IDLE_CHECK_INTERVAL; - client->mailbox->auto_sync(client->mailbox, MAILBOX_SYNC_ALL, interval); + if (client->mailbox != NULL) { + client->mailbox->auto_sync(client->mailbox, + MAILBOX_SYNC_ALL, interval); + } client_send_line(client, "+ idling");