changeset 13274:887bf77ae6f5

indexer: Code cleanup
author Timo Sirainen <tss@iki.fi>
date Thu, 18 Aug 2011 17:59:52 +0300
parents 38e333c52d99
children e538fa0bdcbb
files src/indexer/worker-pool.c
diffstat 1 files changed, 20 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/indexer/worker-pool.c	Tue Aug 16 23:37:42 2011 +0300
+++ b/src/indexer/worker-pool.c	Thu Aug 18 17:59:52 2011 +0300
@@ -24,8 +24,8 @@
 };
 
 static void
-worker_connection_idle_list_free(struct worker_pool *pool,
-				 struct worker_connection_list *list);
+worker_connection_list_free(struct worker_pool *pool,
+			    struct worker_connection_list *list);
 
 struct worker_pool *
 worker_pool_init(const char *socket_path, indexer_status_callback_t *callback)
@@ -48,13 +48,14 @@
 		struct worker_connection_list *list = pool->busy_list;
 
 		DLLIST_REMOVE(&pool->busy_list, list);
-		worker_connection_idle_list_free(pool, list);
+		worker_connection_list_free(pool, list);
 	}
 
 	while (pool->idle_list != NULL) {
 		struct worker_connection_list *list = pool->idle_list;
 
-		worker_connection_idle_list_free(pool, list);
+		DLLIST_REMOVE(&pool->idle_list, list);
+		worker_connection_list_free(pool, list);
 	}
 
 	i_free(pool->socket_path);
@@ -88,15 +89,14 @@
 }
 
 static void
-worker_connection_idle_list_free(struct worker_pool *pool,
-				 struct worker_connection_list *list)
+worker_connection_list_free(struct worker_pool *pool,
+			    struct worker_connection_list *list)
 {
-	DLLIST_REMOVE(&pool->idle_list, list);
+	i_assert(pool->connection_count > 0);
+	pool->connection_count--;
+
 	worker_connection_destroy(&list->conn);
 	i_free(list);
-
-	i_assert(pool->connection_count > 0);
-	pool->connection_count--;
 }
 
 static unsigned int worker_pool_find_max_connections(struct worker_pool *pool)
@@ -125,8 +125,11 @@
 	unsigned int max_connections;
 
 	while (pool->idle_list != NULL &&
-	       !worker_connection_is_connected(pool->idle_list->conn))
-		worker_connection_idle_list_free(pool, pool->idle_list);
+	       !worker_connection_is_connected(pool->idle_list->conn)) {
+		list = pool->idle_list;
+		DLLIST_REMOVE(&pool->idle_list, list);
+		worker_connection_list_free(pool, list);
+	}
 
 	if (pool->idle_list == NULL) {
 		max_connections = worker_pool_find_max_connections(pool);
@@ -152,8 +155,10 @@
 	kill_timestamp = ioloop_time - MAX_WORKER_IDLE_SECS;
 	for (list = pool->idle_list; list != NULL; list = next) {
 		next = list->next;
-		if (list->last_use < kill_timestamp)
-			worker_connection_idle_list_free(pool, list);
+		if (list->last_use < kill_timestamp) {
+			DLLIST_REMOVE(&pool->idle_list, list);
+			worker_connection_list_free(pool, list);
+		}
 	}
 }
 
@@ -176,7 +181,7 @@
 	DLLIST_REMOVE(&pool->busy_list, list);
 
 	if (!worker_connection_is_connected(conn))
-		worker_connection_idle_list_free(pool, list);
+		worker_connection_list_free(pool, list);
 	else {
 		DLLIST_PREPEND(&pool->idle_list, list);
 		list->last_use = ioloop_time;