]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
indexer: Fix memory leak - worker_requests were never freed
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 26 Jan 2022 18:28:33 +0000 (19:28 +0100)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 27 Jan 2022 09:01:27 +0000 (10:01 +0100)
Broken by 141766b24f885259508ae39f2e18811018373bc7

src/indexer/indexer.c
src/indexer/worker-connection.c
src/indexer/worker-connection.h

index 9c63d79c27976afbfb3203d1553e860c0aaba485..6175b5476b3df264d11ca4c2cd6b44a001f8c2e1 100644 (file)
 #include "worker-pool.h"
 #include "worker-connection.h"
 
-struct worker_request {
-       struct connection *conn;
-       struct indexer_request *request;
-};
-
 static const struct master_service_settings *set;
 static struct indexer_queue *queue;
 static struct worker_pool *worker_pool;
@@ -45,14 +40,8 @@ static void client_connected(struct master_service_connection *conn)
 static void worker_send_request(struct connection *conn,
                                struct indexer_request *request)
 {
-       struct worker_request *wrequest;
-
-       wrequest = i_new(struct worker_request, 1);
-       wrequest->conn = conn;
-       wrequest->request = request;
-
        indexer_queue_request_work(request);
-       worker_connection_request(conn, request, wrequest);
+       worker_connection_request(conn, request);
 }
 
 static void queue_try_send_more(struct indexer_queue *queue)
index 964865a6fccdda7b0c9602f303f835af29047d11..19e2a4160f63e3743240cbda9a549302c0190d1f 100644 (file)
@@ -114,14 +114,12 @@ unsigned int worker_connections_get_process_limit(void)
 }
 
 void worker_connection_request(struct connection *conn,
-                              struct indexer_request *request,
-                              void *context)
+                              struct indexer_request *request)
 {
        struct worker_connection *worker =
                container_of(conn, struct worker_connection, conn);
 
        i_assert(worker_connection_is_connected(conn));
-       i_assert(context != NULL);
        i_assert(request->index || request->optimize);
 
        if (worker->request_username == NULL)
index e2818ce3d910847ed39ec3b2caf895920eeaa5ad..e664c7ea6095e514b6300c960e4cf9f8b1362e4a 100644 (file)
@@ -25,11 +25,10 @@ bool worker_connection_is_connected(struct connection *conn);
 unsigned int worker_connections_get_process_limit(void);
 
 /* Send a new indexing request for username+mailbox. The status callback is
-   called as necessary with the given context. Requests can be queued, but
-   only for the same username. */
+   called as necessary. Requests can be queued, but only for the same
+   username. */
 void worker_connection_request(struct connection *conn,
-                              struct indexer_request *request,
-                              void *context);
+                              struct indexer_request *request);
 /* Returns username of the currently pending requests,
    or NULL if there are none. */
 const char *worker_connection_get_username(struct connection *conn);