From: Timo Sirainen Date: Wed, 3 Jun 2015 19:26:05 +0000 (+0300) Subject: indexer: Try to always flush as many requests from queue as possible. X-Git-Tag: 2.2.19.rc1~371 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=be98c0c6da8ee8c00ed731bcb833f491daf76757;p=thirdparty%2Fdovecot%2Fcore.git indexer: Try to always flush as many requests from queue as possible. I don't think this changes the behavior much. It's mainly a code cleanup. --- diff --git a/src/indexer/indexer.c b/src/indexer/indexer.c index aa5610fa65..16d56965e9 100644 --- a/src/indexer/indexer.c +++ b/src/indexer/indexer.c @@ -53,7 +53,7 @@ static void worker_send_request(struct worker_connection *conn, worker_connection_request(conn, request, wrequest); } -static void queue_handle_existing_user_requests(struct indexer_queue *queue) +static void queue_try_send_more(struct indexer_queue *queue) { struct worker_connection *conn; struct indexer_request *request; @@ -61,35 +61,20 @@ static void queue_handle_existing_user_requests(struct indexer_queue *queue) while ((request = indexer_queue_request_peek(queue)) != NULL) { conn = worker_pool_find_username_connection(worker_pool, request->username); - if (conn == NULL) - break; - + if (conn != NULL) { + /* there is already a worker handling this user. + it must be the one doing the indexing. use the same + connection for sending this next request. */ + } else { + /* try to find an empty worker */ + if (!worker_pool_get_connection(worker_pool, &conn)) + break; + } indexer_queue_request_remove(queue); - /* there is already a worker handling this user. - it must be the one doing the indexing. */ worker_send_request(conn, request); } } -static void queue_try_send_more(struct indexer_queue *queue) -{ - struct worker_connection *conn; - struct indexer_request *request; - - queue_handle_existing_user_requests(queue); - - request = indexer_queue_request_peek(queue); - if (request == NULL) - return; - - /* okay, we have a request for a new user. */ - if (!worker_pool_get_connection(worker_pool, &conn)) - return; - - indexer_queue_request_remove(queue); - worker_send_request(conn, request); -} - static void queue_listen_callback(struct indexer_queue *queue) { queue_try_send_more(queue);