]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Removed unused locking code.
authorTimo Sirainen <tss@iki.fi>
Thu, 3 May 2012 21:48:45 +0000 (00:48 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 3 May 2012 21:48:45 +0000 (00:48 +0300)
src/lib-index/mail-index-lock.c
src/lib-index/mail-index-map-read.c
src/lib-index/mail-index-private.h
src/lib-index/mail-index.c

index 034bd53b235b63fb93e07416ef20d2ba69c6a2bb..5f2d932985e7db28dac16ec5b9abe9500770362e 100644 (file)
@@ -36,27 +36,15 @@ int mail_index_lock_fd(struct mail_index *index, const char *path, int fd,
                              timeout_secs, lock_r);
 }
 
-static int mail_index_lock(struct mail_index *index, int lock_type,
+static int mail_index_lock(struct mail_index *index,
                           unsigned int timeout_secs, unsigned int *lock_id_r)
 {
        int ret;
 
-       i_assert(lock_type == F_RDLCK || lock_type == F_WRLCK);
-
-       if (lock_type == F_RDLCK && index->lock_type != F_UNLCK) {
+       if (index->lock_type != F_UNLCK) {
+               /* file is already locked */
                index->shared_lock_count++;
                *lock_id_r = index->lock_id_counter;
-               ret = 1;
-       } else if (lock_type == F_WRLCK && index->lock_type == F_WRLCK) {
-               index->excl_lock_count++;
-               *lock_id_r = index->lock_id_counter + 1;
-               ret = 1;
-       } else {
-               ret = 0;
-       }
-
-       if (ret > 0) {
-               /* file is already locked */
                return 1;
        }
 
@@ -65,39 +53,25 @@ static int mail_index_lock(struct mail_index *index, int lock_type,
                /* FIXME: exclusive locking will rewrite the index file every
                   time. shouldn't really be needed.. reading doesn't require
                   locks then, though */
-               if (lock_type == F_WRLCK)
-                       return 0;
-
                index->shared_lock_count++;
                index->lock_type = F_RDLCK;
                *lock_id_r = index->lock_id_counter;
                return 1;
        }
 
-       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);
-       }
+       i_assert(index->lock_type == F_UNLCK);
+       ret = mail_index_lock_fd(index, index->filepath, index->fd,
+                                F_RDLCK, timeout_secs,
+                                &index->file_lock);
        if (ret <= 0)
                return ret;
 
        if (index->lock_type == F_UNLCK)
                index->lock_id_counter += 2;
-       index->lock_type = lock_type;
-
-       if (lock_type == F_RDLCK) {
-               index->shared_lock_count++;
-               *lock_id_r = index->lock_id_counter;
-       } else {
-               index->excl_lock_count++;
-               *lock_id_r = index->lock_id_counter + 1;
-       }
+       index->lock_type = F_RDLCK;
 
+       index->shared_lock_count++;
+       *lock_id_r = index->lock_id_counter;
        return 1;
 }
 
@@ -125,7 +99,7 @@ int mail_index_lock_shared(struct mail_index *index, unsigned int *lock_id_r)
 
        timeout_secs = I_MIN(MAIL_INDEX_SHARED_LOCK_TIMEOUT,
                             index->max_lock_timeout_secs);
-       ret = mail_index_lock(index, F_RDLCK, timeout_secs, lock_id_r);
+       ret = mail_index_lock(index, timeout_secs, lock_id_r);
        if (ret > 0) {
                mail_index_flush_read_cache(index, index->filepath,
                                            index->fd, TRUE);
@@ -141,48 +115,23 @@ int mail_index_lock_shared(struct mail_index *index, unsigned int *lock_id_r)
        return -1;
 }
 
-int mail_index_try_lock_exclusive(struct mail_index *index,
-                                 unsigned int *lock_id_r)
-{
-       int ret;
-
-       if ((ret = mail_index_lock(index, F_WRLCK, 0, lock_id_r)) > 0) {
-               mail_index_flush_read_cache(index, index->filepath,
-                                           index->fd, TRUE);
-       }
-       return ret;
-}
-
 void mail_index_unlock(struct mail_index *index, unsigned int *_lock_id)
 {
        unsigned int lock_id = *_lock_id;
 
        *_lock_id = 0;
 
-       if ((lock_id & 1) == 0) {
-               /* shared lock */
-               if (!mail_index_is_locked(index, lock_id)) {
-                       /* unlocking some older generation of the index file.
-                          we've already closed the file so just ignore this. */
-                       return;
-               }
-
-               i_assert(index->shared_lock_count > 0);
-               index->shared_lock_count--;
-       } else {
-               /* exclusive lock */
-               i_assert(lock_id == index->lock_id_counter + 1);
-               i_assert(index->excl_lock_count > 0);
-               i_assert(index->lock_type == F_WRLCK);
-               if (--index->excl_lock_count == 0 &&
-                   index->shared_lock_count > 0) {
-                       /* drop back to a shared lock. */
-                       index->lock_type = F_RDLCK;
-                       (void)file_lock_try_update(index->file_lock, F_RDLCK);
-               }
+       /* shared lock */
+       if (!mail_index_is_locked(index, lock_id)) {
+               /* unlocking some older generation of the index file.
+                  we've already closed the file so just ignore this. */
+               return;
        }
 
-       if (index->shared_lock_count == 0 && index->excl_lock_count == 0) {
+       i_assert(index->shared_lock_count > 0);
+       index->shared_lock_count--;
+
+       if (index->shared_lock_count == 0) {
                index->lock_id_counter += 2;
                index->lock_type = F_UNLCK;
                if (index->lock_method != FILE_LOCK_METHOD_DOTLOCK) {
index fe13215098aacd804d369acacebf32b6da3db47b..5bf2138b6024958f9723e49ed0baa93ea2b45abe 100644 (file)
@@ -400,7 +400,6 @@ int mail_index_map(struct mail_index *index,
 {
        int ret;
 
-       i_assert(index->lock_type != F_WRLCK);
        i_assert(!index->mapping);
 
        index->mapping = TRUE;
index bbfe2025600290651dd2f431157fe21c6ee65372..3bba027c3937b8940dc5650ec294cff704f71441 100644 (file)
@@ -205,7 +205,7 @@ struct mail_index {
        /* syncing will update this if non-NULL */
        struct mail_index_transaction_commit_result *sync_commit_result;
 
-       int lock_type, shared_lock_count, excl_lock_count;
+       int lock_type, shared_lock_count;
        unsigned int lock_id_counter;
        enum file_lock_method lock_method;
        unsigned int max_lock_timeout_secs;
@@ -275,9 +275,6 @@ void mail_index_flush_read_cache(struct mail_index *index, const char *path,
 
 /* Returns 0 = ok, -1 = error. */
 int mail_index_lock_shared(struct mail_index *index, unsigned int *lock_id_r);
-/* Returns 1 = ok, 0 = already locked, -1 = error. */
-int mail_index_try_lock_exclusive(struct mail_index *index,
-                                 unsigned int *lock_id_r);
 void mail_index_unlock(struct mail_index *index, unsigned int *lock_id);
 /* Returns TRUE if given lock_id is valid. */
 bool mail_index_is_locked(struct mail_index *index, unsigned int lock_id);
index d100332bf7fb2f5338363aaa3d00e444dd394aac..667f219c7023b9c9ac97329bd5e9bbe542a1363d 100644 (file)
@@ -570,7 +570,6 @@ int mail_index_open(struct mail_index *index, enum mail_index_open_flags flags)
                i_strconcat(index->dir, "/", index->prefix, NULL);
 
        index->shared_lock_count = 0;
-       index->excl_lock_count = 0;
        index->lock_type = F_UNLCK;
        index->lock_id_counter = 2;
 
@@ -629,7 +628,6 @@ void mail_index_close_file(struct mail_index *index)
        index->lock_id_counter += 2;
        index->lock_type = F_UNLCK;
        index->shared_lock_count = 0;
-       index->excl_lock_count = 0;
 }
 
 void mail_index_close(struct mail_index *index)
@@ -695,7 +693,6 @@ int mail_index_reopen_if_changed(struct mail_index *index)
 
        i_assert(index->shared_lock_count == 0 ||
                 (index->flags & MAIL_INDEX_OPEN_FLAG_NFS_FLUSH) == 0);
-       i_assert(index->excl_lock_count == 0);
 
        if (MAIL_INDEX_IS_IN_MEMORY(index))
                return 0;