[dovecot-cvs] dovecot/src/imap cmd-idle.c,1.5,1.6
cras at procontrol.fi
cras at procontrol.fi
Fri Feb 21 16:28:47 EET 2003
Update of /home/cvs/dovecot/src/imap
In directory danu:/tmp/cvs-serv58
Modified Files:
cmd-idle.c
Log Message:
cork the output before sending the ending IDLE replies.
Index: cmd-idle.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-idle.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- cmd-idle.c 20 Feb 2003 21:43:28 -0000 1.5
+++ cmd-idle.c 21 Feb 2003 14:28:45 -0000 1.6
@@ -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");
More information about the dovecot-cvs
mailing list