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);