Fix memory leak when connection slot is full.
authorYoshiyuki Asaba <y-asaba at pgfoundry.org>
Thu, 26 Jul 2007 03:01:42 +0000 (03:01 +0000)
committerYoshiyuki Asaba <y-asaba at pgfoundry.org>
Thu, 26 Jul 2007 03:01:42 +0000 (03:01 +0000)
pool_connection_pool.c

index cb99d56d92b25a951d64306c9671b8b527232c9c..ceb801e0fece578d1630d758ab2a32df37ce7e0b 100644 (file)
@@ -104,11 +104,12 @@ POOL_CONNECTION_POOL *pool_get_cp(char *user, char *database, int protoMajor, in
                                pool_log("connection closed. retry to create new connection pool.");
                                pool_free_startup_packet(MASTER_CONNECTION(p)->sp);
                                pool_close(MASTER_CONNECTION(p)->con);
+                               free(MASTER_CONNECTION(p));
 
                                if (DUAL_MODE)
                                {
-                                       /* do not free memory! we did not allocate them */
                                        pool_close(SECONDARY_CONNECTION(p)->con);
+                                       free(SECONDARY_CONNECTION(p));
                                }
 
                                memset(p, 0, sizeof(POOL_CONNECTION_POOL));
@@ -205,11 +206,13 @@ POOL_CONNECTION_POOL *pool_create_cp(void)
 
        pool_free_startup_packet(MASTER_CONNECTION(p)->sp);
        pool_close(MASTER_CONNECTION(p)->con);
+       free(MASTER_CONNECTION(p));
 
        if (DUAL_MODE)
        {
                /* do not free memory! we did not allocate them */
                pool_close(SECONDARY_CONNECTION(p)->con);
+               free(SECONDARY_CONNECTION(p));
        }
 
        memset(p, 0, sizeof(POOL_CONNECTION_POOL));
@@ -290,11 +293,12 @@ RETSIGTYPE pool_backend_timer_handler(int sig)
 
                                pool_free_startup_packet(MASTER_CONNECTION(p)->sp);
                                pool_close(MASTER_CONNECTION(p)->con);
+                               free(MASTER_CONNECTION(p));
 
                                if (DUAL_MODE)
                                {
-                                       /* do not free memory! we did not allocate them */
                                        pool_close(SECONDARY_CONNECTION(p)->con);
+                                       free(SECONDARY_CONNECTION(p));
                                }
 
                                memset(p, 0, sizeof(POOL_CONNECTION_POOL));