diff options
Diffstat (limited to 'src/bin/scripts')
-rw-r--r-- | src/bin/scripts/clusterdb.c | 2 | ||||
-rw-r--r-- | src/bin/scripts/common.c | 147 | ||||
-rw-r--r-- | src/bin/scripts/common.h | 7 | ||||
-rw-r--r-- | src/bin/scripts/reindexdb.c | 2 | ||||
-rw-r--r-- | src/bin/scripts/vacuumdb.c | 2 |
5 files changed, 4 insertions, 156 deletions
diff --git a/src/bin/scripts/clusterdb.c b/src/bin/scripts/clusterdb.c index d3801273566..3aee5f28349 100644 --- a/src/bin/scripts/clusterdb.c +++ b/src/bin/scripts/clusterdb.c @@ -133,7 +133,7 @@ main(int argc, char *argv[]) exit(1); } - setup_cancel_handler(); + setup_cancel_handler(NULL); if (alldb) { diff --git a/src/bin/scripts/common.c b/src/bin/scripts/common.c index 1b38a1da494..d2a7547441a 100644 --- a/src/bin/scripts/common.c +++ b/src/bin/scripts/common.c @@ -24,14 +24,6 @@ #define ERRCODE_UNDEFINED_TABLE "42P01" - -static PGcancel *volatile cancelConn = NULL; -bool CancelRequested = false; - -#ifdef WIN32 -static CRITICAL_SECTION cancelConnLock; -#endif - /* * Provide strictly harmonized handling of --help and --version * options. @@ -465,142 +457,3 @@ yesno_prompt(const char *question) _(PG_YESLETTER), _(PG_NOLETTER)); } } - -/* - * SetCancelConn - * - * Set cancelConn to point to the current database connection. - */ -void -SetCancelConn(PGconn *conn) -{ - PGcancel *oldCancelConn; - -#ifdef WIN32 - EnterCriticalSection(&cancelConnLock); -#endif - - /* Free the old one if we have one */ - oldCancelConn = cancelConn; - - /* be sure handle_sigint doesn't use pointer while freeing */ - cancelConn = NULL; - - if (oldCancelConn != NULL) - PQfreeCancel(oldCancelConn); - - cancelConn = PQgetCancel(conn); - -#ifdef WIN32 - LeaveCriticalSection(&cancelConnLock); -#endif -} - -/* - * ResetCancelConn - * - * Free the current cancel connection, if any, and set to NULL. - */ -void -ResetCancelConn(void) -{ - PGcancel *oldCancelConn; - -#ifdef WIN32 - EnterCriticalSection(&cancelConnLock); -#endif - - oldCancelConn = cancelConn; - - /* be sure handle_sigint doesn't use pointer while freeing */ - cancelConn = NULL; - - if (oldCancelConn != NULL) - PQfreeCancel(oldCancelConn); - -#ifdef WIN32 - LeaveCriticalSection(&cancelConnLock); -#endif -} - -#ifndef WIN32 -/* - * Handle interrupt signals by canceling the current command, if a cancelConn - * is set. - */ -static void -handle_sigint(SIGNAL_ARGS) -{ - int save_errno = errno; - char errbuf[256]; - - /* Send QueryCancel if we are processing a database query */ - if (cancelConn != NULL) - { - if (PQcancel(cancelConn, errbuf, sizeof(errbuf))) - { - CancelRequested = true; - fprintf(stderr, _("Cancel request sent\n")); - } - else - fprintf(stderr, _("Could not send cancel request: %s"), errbuf); - } - else - CancelRequested = true; - - errno = save_errno; /* just in case the write changed it */ -} - -void -setup_cancel_handler(void) -{ - pqsignal(SIGINT, handle_sigint); -} -#else /* WIN32 */ - -/* - * Console control handler for Win32. Note that the control handler will - * execute on a *different thread* than the main one, so we need to do - * proper locking around those structures. - */ -static BOOL WINAPI -consoleHandler(DWORD dwCtrlType) -{ - char errbuf[256]; - - if (dwCtrlType == CTRL_C_EVENT || - dwCtrlType == CTRL_BREAK_EVENT) - { - /* Send QueryCancel if we are processing a database query */ - EnterCriticalSection(&cancelConnLock); - if (cancelConn != NULL) - { - if (PQcancel(cancelConn, errbuf, sizeof(errbuf))) - { - fprintf(stderr, _("Cancel request sent\n")); - CancelRequested = true; - } - else - fprintf(stderr, _("Could not send cancel request: %s"), errbuf); - } - else - CancelRequested = true; - - LeaveCriticalSection(&cancelConnLock); - - return TRUE; - } - else - /* Return FALSE for any signals not being handled */ - return FALSE; -} - -void -setup_cancel_handler(void) -{ - InitializeCriticalSection(&cancelConnLock); - - SetConsoleCtrlHandler(consoleHandler, TRUE); -} - -#endif /* WIN32 */ diff --git a/src/bin/scripts/common.h b/src/bin/scripts/common.h index b8580f927a5..db2f85b4720 100644 --- a/src/bin/scripts/common.h +++ b/src/bin/scripts/common.h @@ -10,6 +10,7 @@ #define COMMON_H #include "common/username.h" +#include "fe_utils/cancel.h" #include "getopt_long.h" /* pgrminclude ignore */ #include "libpq-fe.h" #include "pqexpbuffer.h" /* pgrminclude ignore */ @@ -60,10 +61,4 @@ extern void appendQualifiedRelation(PQExpBuffer buf, const char *name, extern bool yesno_prompt(const char *question); -extern void setup_cancel_handler(void); - -extern void SetCancelConn(PGconn *conn); -extern void ResetCancelConn(void); - - #endif /* COMMON_H */ diff --git a/src/bin/scripts/reindexdb.c b/src/bin/scripts/reindexdb.c index f00aec15de3..bedd95cf9df 100644 --- a/src/bin/scripts/reindexdb.c +++ b/src/bin/scripts/reindexdb.c @@ -187,7 +187,7 @@ main(int argc, char *argv[]) exit(1); } - setup_cancel_handler(); + setup_cancel_handler(NULL); if (alldb) { diff --git a/src/bin/scripts/vacuumdb.c b/src/bin/scripts/vacuumdb.c index 2c7219239f9..83a94dc632f 100644 --- a/src/bin/scripts/vacuumdb.c +++ b/src/bin/scripts/vacuumdb.c @@ -257,7 +257,7 @@ main(int argc, char *argv[]) /* allow 'and_analyze' with 'analyze_only' */ } - setup_cancel_handler(); + setup_cancel_handler(NULL); /* Avoid opening extra connections. */ if (tbl_count && (concurrentCons > tbl_count)) |