]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: Fixed crashes with settings cache.
authorTimo Sirainen <tss@iki.fi>
Tue, 2 Oct 2012 20:12:07 +0000 (23:12 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 2 Oct 2012 20:12:07 +0000 (23:12 +0300)
src/lib-master/master-service-settings-cache.c

index 0cfb3ae583b54235ccb3166d38f04e145652271a..51304b7686ca2b8f6286e33ae01675c946bd2591 100644 (file)
@@ -83,6 +83,7 @@ void master_service_settings_cache_deinit(struct master_service_settings_cache *
        }
        for (entry = cache->oldest; entry != NULL; entry = next) {
                next = entry->next;
+               i_assert(entry->parser != cache->global_parser);
                settings_parser_deinit(&entry->parser);
                pool_unref(&entry->pool);
        }
@@ -146,8 +147,10 @@ cache_find(struct master_service_settings_cache *cache,
        }
 
        if (entry != NULL) {
-               DLLIST2_REMOVE(&cache->oldest, &cache->newest, entry);
-               DLLIST2_APPEND(&cache->oldest, &cache->newest, entry);
+               if (entry->parser != cache->global_parser) {
+                       DLLIST2_REMOVE(&cache->oldest, &cache->newest, entry);
+                       DLLIST2_APPEND(&cache->oldest, &cache->newest, entry);
+               }
                *parser_r = entry->parser;
                return TRUE;
        }