]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: More undoing of locking code changes.
authorTimo Sirainen <tss@iki.fi>
Mon, 18 Oct 2010 15:14:08 +0000 (16:14 +0100)
committerTimo Sirainen <tss@iki.fi>
Mon, 18 Oct 2010 15:14:08 +0000 (16:14 +0100)
src/lib-index/mail-index-lock.c

index c964a6b3a299af12aef5af800c80bbf2610ea816..87524791449a1b8b5735b8d5b7fc263847a030a6 100644 (file)
@@ -74,9 +74,15 @@ static int mail_index_lock(struct mail_index *index, int lock_type,
                return 1;
        }
 
-       i_assert(index->file_lock == NULL);
-       ret = mail_index_lock_fd(index, index->filepath, index->fd,
-                                lock_type, timeout_secs, &index->file_lock);
+       if (index->file_lock == NULL) {
+               i_assert(index->lock_type == F_UNLCK);
+               ret = mail_index_lock_fd(index, index->filepath, index->fd,
+                                        lock_type, timeout_secs,
+                                        &index->file_lock);
+       } else {
+               i_assert(index->lock_type == F_RDLCK && lock_type == F_WRLCK);
+               ret = file_lock_try_update(index->file_lock, lock_type);
+       }
        if (ret <= 0)
                return ret;