--- pgcluster-1.7.0rc7/src/backend/libpq/lifecheck.c.orig 2007-11-30 12:12:17.000000000 +0000 +++ pgcluster-1.7.0rc7/src/backend/libpq/lifecheck.c 2007-11-30 12:12:00.000000000 +0000 @@ -207,6 +207,14 @@ FD_ZERO(&wmask); FD_SET(sock,&wmask); rtn = select(sock+1, (fd_set *)NULL, &wmask, (fd_set *)NULL, &timeout); + if ((rtn < 0) && (errno != EINTR)) + { + PGR_close_replicate_server_socket(PGR_Replicator_4_Lifecheck, PGR_QUERY_SOCKET); + sock = PGR_get_replicate_server_socket( PGR_Replicator_4_Lifecheck , PGR_QUERY_SOCKET ); + FD_ZERO(&wmask); + FD_SET(sock,&wmask); + rtn = select(sock+1, (fd_set *)NULL, &wmask, (fd_set *)NULL, &timeout); + } if (rtn < 0) { if (errno == EINTR) --- pgcluster-1.7.0rc7/src/backend/libpq/replicate.c.orig 2007-12-03 09:56:34.000000000 +0000 +++ pgcluster-1.7.0rc7/src/backend/libpq/replicate.c 2007-12-03 10:00:45.000000000 +0000 @@ -88,7 +88,6 @@ static bool is_same_replication_server(ReplicateServerInfo * sp1, ReplicateServerInfo * sp2 ); static ReplicateServerInfo * search_new_replication_server ( ReplicateServerInfo * sp , int socket_type ); -static int close_replicate_server_socket ( ReplicateServerInfo * sp , int socket_type ); static int recv_message(int sock,char * buf,int flag); static int send_replicate_packet(int sock,ReplicateHeader * header, char * query_string); static bool is_copy_from(char * query); @@ -567,7 +566,7 @@ /*-------------------------------------------------------------------- * SYMBOL - * close_replicate_server_socket() + * PGR_close_replicate_server_socket() * NOTES * close the socket connected with the replication server * ARGS @@ -580,8 +579,8 @@ * NG: STATUS_ERROR *-------------------------------------------------------------------- */ -static int -close_replicate_server_socket ( ReplicateServerInfo * sp , int socket_type ) +int +PGR_close_replicate_server_socket ( ReplicateServerInfo * sp , int socket_type ) { if (sp == (ReplicateServerInfo *)NULL ) { @@ -648,7 +647,7 @@ return NULL; } rs_tbl = sp; - close_replicate_server_socket ( sp , socket_type); + PGR_close_replicate_server_socket ( sp , socket_type); sp ++; while (is_same_replication_server(sp,rs_tbl) != true) { @@ -683,7 +682,7 @@ if (send_replicate_packet(sock,&dummy_header,command) != STATUS_OK) { cnt ++; - close_replicate_server_socket ( sp , socket_type); + PGR_close_replicate_server_socket ( sp , socket_type); PGR_Set_Replication_Server_Status(sp, DATA_ERR); } else @@ -1207,7 +1206,7 @@ { return -1; } - close_replicate_server_socket ( sp , socket_type); + PGR_close_replicate_server_socket ( sp , socket_type); PGR_Set_Replication_Server_Status(sp, DATA_ERR); sp = search_new_replication_server(base, socket_type); if (sp == NULL) --- pgcluster-1.7.0rc7/src/include/replicate.h.orig 2007-12-03 10:13:23.000000000 +0000 +++ pgcluster-1.7.0rc7/src/include/replicate.h 2007-12-03 10:13:54.000000000 +0000 @@ -161,6 +161,7 @@ extern int PGR_Init_Replicate_Server_Data(void); extern int PGR_Set_Replicate_Server_Socket(void); extern int PGR_get_replicate_server_socket ( ReplicateServerInfo * sp , int socket_type ); +extern int PGR_close_replicate_server_socket ( ReplicateServerInfo * sp , int socket_type ); extern ReplicateServerInfo * PGR_get_replicate_server_info(void); extern ReplicateServerInfo * PGR_check_replicate_server_info(void); extern char * PGR_Send_Replicate_Command(char * query_string, int query_len, char cmdSts ,char cmdType);