Skip to content

Commit

Permalink
Add a check of the connection inside the CancelQuery() so it check
Browse files Browse the repository at this point in the history
that before trying to cancel a query, which can block.
  • Loading branch information
Jaime Casanova authored and Jaime Casanova committed Jun 26, 2012
1 parent d58ea77 commit cb740b6
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 8 deletions.
8 changes: 4 additions & 4 deletions dbutils.c
Expand Up @@ -146,7 +146,7 @@ is_pgup(PGconn *conn, int timeout)
/*
* Send a SELECT 1 just to check if the connection is OK
*/
CancelQuery(conn);
CancelQuery(conn, timeout);
if (wait_connection_availability(conn, timeout) != 1)
goto failed;

Expand Down Expand Up @@ -430,17 +430,17 @@ wait_connection_availability(PGconn *conn, int timeout)


void
CancelQuery(PGconn *conn)
CancelQuery(PGconn *conn, int timeout)
{
char errbuf[ERRBUFF_SIZE];
PGcancel *pgcancel;

wait_connection_availability(conn, timeout);

pgcancel = PQgetCancel(conn);

if (!pgcancel || PQcancel(pgcancel, errbuf, ERRBUFF_SIZE) == 0)
log_warning(_("Can't stop current query: %s\n"), errbuf);

PQfreeCancel(pgcancel);
}


2 changes: 1 addition & 1 deletion dbutils.h
Expand Up @@ -37,5 +37,5 @@ PGconn *getMasterConnection(PGconn *standby_conn, char *schema, char *cluster,
int *master_id, char *master_conninfo_out);

int wait_connection_availability(PGconn *conn, int timeout);
void CancelQuery(PGconn *conn);
void CancelQuery(PGconn *conn, int timeout);
#endif
6 changes: 3 additions & 3 deletions repmgrd.c
Expand Up @@ -99,7 +99,7 @@ static void setup_event_handlers(void);

#define CloseConnections() \
if (PQisBusy(primaryConn) == 1) \
CancelQuery(primaryConn); \
CancelQuery(primaryConn, local_options.master_response_timeout); \
if (myLocalConn != NULL) \
PQfinish(myLocalConn); \
if (primaryConn != NULL && primaryConn != myLocalConn) \
Expand Down Expand Up @@ -356,7 +356,7 @@ WitnessMonitor(void)
* Cancel any query that is still being executed,
* so i can insert the current record
*/
CancelQuery(primaryConn);
CancelQuery(primaryConn, local_options.master_response_timeout);
if (wait_connection_availability(primaryConn, local_options.master_response_timeout) != 1)
return;

Expand Down Expand Up @@ -473,7 +473,7 @@ StandbyMonitor(void)
* Cancel any query that is still being executed,
* so i can insert the current record
*/
CancelQuery(primaryConn);
CancelQuery(primaryConn, local_options.master_response_timeout);
if (wait_connection_availability(primaryConn, local_options.master_response_timeout) != 1)
return;

Expand Down

0 comments on commit cb740b6

Please sign in to comment.