]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
If client tries to change the selected mailbox state while another command
authorTimo Sirainen <tss@iki.fi>
Fri, 16 May 2008 20:43:56 +0000 (23:43 +0300)
committerTimo Sirainen <tss@iki.fi>
Fri, 16 May 2008 20:43:56 +0000 (23:43 +0300)
is still running, wait until the command is finished.

--HG--
branch : HEAD

src/imap/client.c
src/imap/commands.h

index e9cc00d09c6bbe56337050a7f7e76b320ebbebc2..fa194d9e7126d4386ad50130c344dc98ee4e6f39 100644 (file)
@@ -352,7 +352,12 @@ static bool client_command_check_ambiguity(struct client_command_context *cmd)
        enum command_flags flags;
        bool broken_client = FALSE;
 
-       if ((cmd->cmd_flags & COMMAND_FLAG_USES_SEQS) != 0) {
+       if ((cmd->cmd_flags & COMMAND_FLAG_BREAKS_MAILBOX) ==
+           COMMAND_FLAG_BREAKS_MAILBOX) {
+               /* there must be no other command running that uses the
+                  selected mailbox */
+               flags = COMMAND_FLAG_USES_MAILBOX;
+       } else if ((cmd->cmd_flags & COMMAND_FLAG_USES_SEQS) != 0) {
                /* no existing command must be breaking sequences */
                flags = COMMAND_FLAG_BREAKS_SEQS;
                broken_client = TRUE;
index a9b0e5da29098bc492b210bd980d58e86fdea3fd..0b45d3aaa20b91d2d5c82bbb89ab1bf873346cf3 100644 (file)
@@ -16,7 +16,11 @@ enum command_flags {
        /* Command may reply with EXPUNGE, causing sequences to break */
        COMMAND_FLAG_BREAKS_SEQS        = 0x02,
        /* Command changes the mailbox */
-       COMMAND_FLAG_BREAKS_MAILBOX     = 0x04 | COMMAND_FLAG_BREAKS_SEQS
+       COMMAND_FLAG_BREAKS_MAILBOX     = 0x04 | COMMAND_FLAG_BREAKS_SEQS,
+
+       /* Command uses selected mailbox */
+       COMMAND_FLAG_USES_MAILBOX       = COMMAND_FLAG_BREAKS_MAILBOX |
+                                         COMMAND_FLAG_USES_SEQS
 };
 
 struct command {