]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
indexer: Properly fix crashing at deinit when there are pending requests.
authorTimo Sirainen <tss@iki.fi>
Mon, 29 Jun 2015 09:05:25 +0000 (12:05 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 29 Jun 2015 09:05:25 +0000 (12:05 +0300)
src/indexer/indexer-queue.c

index 6be51eced9358237978234fe15bc9a3f359b034d..7397b88d80dbfb16a2589cd7162956b0de81f56d 100644 (file)
@@ -235,6 +235,15 @@ void indexer_queue_request_finish(struct indexer_queue *queue,
 void indexer_queue_cancel_all(struct indexer_queue *queue)
 {
        struct indexer_request *request;
+       struct hash_iterate_context *iter;
+
+       /* remove all reindex-markers so when the current requests finish
+          (or are cancelled) we don't try to retry them (especially during
+          deinit where it crashes) */
+       iter = hash_table_iterate_init(queue->requests);
+       while (hash_table_iterate(iter, queue->requests, &request, &request))
+               request->reindex_head = request->reindex_tail = FALSE;
+       hash_table_iterate_deinit(&iter);
 
        while ((request = indexer_queue_request_peek(queue)) != NULL) {
                indexer_queue_request_remove(queue);