]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
indexer: Split off a more generic indexer_queue_request_cancel()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 25 Jan 2022 21:48:20 +0000 (22:48 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Sun, 13 Feb 2022 10:23:26 +0000 (10:23 +0000)
This function can be used to cancel any request, not just the head of the
queue.

src/indexer/indexer-queue.c

index 5870ae2a452e8ed3623d32fbebda6ce639390790..d698eb1b1b40962d3bfbac9701a4e149699b924e 100644 (file)
@@ -280,6 +280,18 @@ void indexer_queue_request_finish(struct indexer_queue *queue,
        indexer_refresh_proctitle();
 }
 
+static void
+indexer_queue_request_cancel(struct indexer_queue *queue,
+                            struct indexer_request **_request)
+{
+       struct indexer_request *request = *_request;
+
+       *_request = NULL;
+       request->reindex_head = request->reindex_tail = FALSE;
+       DLLIST2_REMOVE(&queue->head, &queue->tail, request);
+       indexer_queue_request_finish(queue, &request, FALSE);
+}
+
 void indexer_queue_cancel_all(struct indexer_queue *queue)
 {
        struct indexer_request *request;
@@ -293,10 +305,8 @@ void indexer_queue_cancel_all(struct indexer_queue *queue)
                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);
-               indexer_queue_request_finish(queue, &request, FALSE);
-       }
+       while ((request = indexer_queue_request_peek(queue)) != NULL)
+               indexer_queue_request_cancel(queue, &request);
 }
 
 bool indexer_queue_is_empty(struct indexer_queue *queue)