Mercurial > dovecot > core-2.2
changeset 18890:85822087fe3d
indexer: Properly fix crashing at deinit when there are pending requests.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 29 Jun 2015 12:05:25 +0300 |
parents | 1458276c0a07 |
children | 740935acc0f8 |
files | src/indexer/indexer-queue.c |
diffstat | 1 files changed, 9 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/indexer/indexer-queue.c Mon Jun 29 12:00:05 2015 +0300 +++ b/src/indexer/indexer-queue.c Mon Jun 29 12:05:25 2015 +0300 @@ -235,6 +235,15 @@ 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);