]> granicus.if.org Git - pgbouncer/commitdiff
simplify oldest connection logic
authorCody Cutrer <cody@instructure.com>
Wed, 28 Aug 2013 00:27:55 +0000 (18:27 -0600)
committerCody Cutrer <cody@instructure.com>
Mon, 7 Oct 2013 21:38:53 +0000 (15:38 -0600)
include/objects.h
src/objects.c

index 509749d06615fa6fd7baaac1d75d27f39fe378e7..b18148b48e9c31c9ad112a11434dd147abcd143c 100644 (file)
@@ -32,7 +32,7 @@ extern struct Slab *iobuf_cache;
 PgDatabase *find_database(const char *name);
 PgUser *find_user(const char *name);
 PgPool *get_pool(PgDatabase *, PgUser *);
-void check_oldest_connection(PgSocket **oldest_connection, PgSocket *connection);
+PgSocket *compare_connections_by_time(PgSocket *lhs, PgSocket *rhs);
 bool evict_connection(PgDatabase *db)          _MUSTCHECK;
 bool find_server(PgSocket *client)             _MUSTCHECK;
 bool release_server(PgSocket *server)          /* _MUSTCHECK */;
index 6550f40a8ca219a64aeba612a843b3bc49ef74a5..904d8f8a7132d4901c4cd00f2f813c554cdeccd2 100644 (file)
@@ -976,17 +976,13 @@ static void dns_connect(struct PgSocket *server)
        connect_server(server, sa, sa_len);
 }
 
-void check_oldest_connection(PgSocket **oldest_connection, PgSocket *connection)
+PgSocket *compare_connections_by_time(PgSocket *lhs, PgSocket *rhs)
 {
-       if (!connection)
-               return;
-       if (!*oldest_connection) {
-               *oldest_connection = connection;
-               return;
-       }
-       if (connection->request_time < (*oldest_connection)->request_time) {
-               *oldest_connection = connection;
-       }
+       if (!lhs)
+               return rhs;
+       if (!rhs)
+               return lhs;
+       return lhs->request_time < rhs->request_time ? lhs : rhs;
 }
 
 /* evict the single most idle connection from among all pools to make room in the db */
@@ -1000,11 +996,11 @@ bool evict_connection(PgDatabase *db)
                pool = container_of(item, PgPool, head);
                if (pool->db != db)
                        continue;
-               check_oldest_connection(&oldest_connection, last_socket(&pool->idle_server_list));
+               oldest_connection = compare_connections_by_time(oldest_connection, last_socket(&pool->idle_server_list));
                // only evict testing connections if nobody's waiting
                if (statlist_empty(&pool->waiting_client_list)) {
-                       check_oldest_connection(&oldest_connection, last_socket(&pool->used_server_list));
-                       check_oldest_connection(&oldest_connection, last_socket(&pool->tested_server_list));
+                       oldest_connection = compare_connections_by_time(oldest_connection, last_socket(&pool->used_server_list));
+                       oldest_connection = compare_connections_by_time(oldest_connection, last_socket(&pool->tested_server_list));
                }
        }