changeset 13206:513ec6bf3fab

indexer: Deinitialize without crashing when there are requests.
author Timo Sirainen <tss@iki.fi>
date Wed, 10 Aug 2011 15:17:12 +0300
parents f7c5ee1ef0c0
children 076673c45e58
files src/indexer/indexer.c
diffstat 1 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/indexer/indexer.c	Wed Aug 10 15:16:44 2011 +0300
+++ b/src/indexer/indexer.c	Wed Aug 10 15:17:12 2011 +0300
@@ -108,7 +108,8 @@
 
 	indexer_queue_request_finish(queue, &request->request,
 				     percentage == 100);
-	worker_pool_release_connection(worker_pool, request->conn);
+	if (worker_pool != NULL) /* not in deinit */
+		worker_pool_release_connection(worker_pool, request->conn);
 	i_free(request);
 
 	/* if this was the last request for the connection, we can send more
@@ -135,17 +136,17 @@
 	master_service_set_idle_die_callback(master_service, idle_die);
 
 	master_service_init_finish(master_service);
+	queue = indexer_queue_init(indexer_client_status_callback);
+	indexer_queue_set_listen_callback(queue, queue_listen_callback);
 	worker_pool = worker_pool_init("indexer-worker",
 				       worker_status_callback);
-	queue = indexer_queue_init(indexer_client_status_callback);
-	indexer_queue_set_listen_callback(queue, queue_listen_callback);
 
 	master_service_run(master_service, client_connected);
 
 	indexer_queue_cancel_all(queue);
 	indexer_clients_destroy_all();
+	worker_pool_deinit(&worker_pool);
 	indexer_queue_deinit(&queue);
-	worker_pool_deinit(&worker_pool);
 
 	master_service_deinit(&master_service);
         return 0;