From d7c003336812569f9c136a8a22793e107fd9b40c Mon Sep 17 00:00:00 2001 From: Yoshiyuki Asaba Date: Mon, 12 Feb 2007 06:21:03 +0000 Subject: [PATCH] pgpool *only* checks backend connection when connection pool is reused. --- child.c | 2 +- pool.h | 2 +- pool_connection_pool.c | 9 +++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/child.c b/child.c index 6b8b601..aead674 100644 --- a/child.c +++ b/child.c @@ -259,7 +259,7 @@ void do_child(int unix_fd, int inet_fd) /* look for existing connection */ found = 0; - backend = pool_get_cp(sp->user, sp->database, sp->major); + backend = pool_get_cp(sp->user, sp->database, sp->major, 1); if (backend != NULL) { diff --git a/pool.h b/pool.h index 4f5772b..e83b09f 100644 --- a/pool.h +++ b/pool.h @@ -307,7 +307,7 @@ extern int pool_do_reauth(POOL_CONNECTION *frontend, POOL_CONNECTION_POOL *cp); extern int pool_init_cp(void); extern POOL_CONNECTION_POOL *pool_create_cp(void); -extern POOL_CONNECTION_POOL *pool_get_cp(char *user, char *database, int protoMajor); +extern POOL_CONNECTION_POOL *pool_get_cp(char *user, char *database, int protoMajor, int check_socket); extern void pool_discard_cp(char *user, char *database, int protoMajor); extern POOL_STATUS ErrorResponse(POOL_CONNECTION *frontend, diff --git a/pool_connection_pool.c b/pool_connection_pool.c index 3abac3a..e743e47 100644 --- a/pool_connection_pool.c +++ b/pool_connection_pool.c @@ -65,7 +65,7 @@ int pool_init_cp(void) /* * find connection by user and database */ -POOL_CONNECTION_POOL *pool_get_cp(char *user, char *database, int protoMajor) +POOL_CONNECTION_POOL *pool_get_cp(char *user, char *database, int protoMajor, int check_socket) { #ifdef HAVE_SIGPROCMASK sigset_t oldmask; @@ -97,8 +97,9 @@ POOL_CONNECTION_POOL *pool_get_cp(char *user, char *database, int protoMajor) MASTER_CONNECTION(p)->closetime = 0; POOL_SETMASK(&oldmask); - if (check_socket_status(MASTER(p)->fd) < 0 || - (DUAL_MODE && check_socket_status(MASTER(p)->fd) < 0)) + if (check_socket && + (check_socket_status(MASTER(p)->fd) < 0 || + (DUAL_MODE && check_socket_status(MASTER(p)->fd) < 0))) { pool_log("connection closed. retry to create new connection pool."); pool_free_startup_packet(MASTER_CONNECTION(p)->sp); @@ -128,7 +129,7 @@ POOL_CONNECTION_POOL *pool_get_cp(char *user, char *database, int protoMajor) */ void pool_discard_cp(char *user, char *database, int protoMajor) { - POOL_CONNECTION_POOL *p = pool_get_cp(user, database, protoMajor); + POOL_CONNECTION_POOL *p = pool_get_cp(user, database, protoMajor, 0); if (p == NULL) { -- 2.39.5