PostgreSQL Source Code git master
cancel.c File Reference
#include "postgres_fe.h"
#include <unistd.h>
#include "common/connect.h"
#include "fe_utils/cancel.h"
#include "fe_utils/string_utils.h"
Include dependency graph for cancel.c:

Go to the source code of this file.

Macros

#define write_stderr(str)
 

Functions

void SetCancelConn (PGconn *conn)
 
void ResetCancelConn (void)
 
static void handle_sigint (SIGNAL_ARGS)
 
void setup_cancel_handler (void(*query_cancel_callback)(void))
 

Variables

static PGcancel *volatile cancelConn = NULL
 
static const char * cancel_sent_msg = NULL
 
static const char * cancel_not_sent_msg = NULL
 
volatile sig_atomic_t CancelRequested = false
 
static void(* cancel_callback )(void) = NULL
 

Macro Definition Documentation

◆ write_stderr

#define write_stderr (   str)
Value:
do { \
const char *str_ = (str); \
int rc_; \
rc_ = write(fileno(stderr), str_, strlen(str_)); \
(void) rc_; \
} while (0)
const char * str
#define write(a, b, c)
Definition: win32.h:14

Definition at line 31 of file cancel.c.

Function Documentation

◆ handle_sigint()

static void handle_sigint ( SIGNAL_ARGS  )
static

Definition at line 153 of file cancel.c.

154{
155 char errbuf[256];
156
157 CancelRequested = true;
158
159 if (cancel_callback != NULL)
161
162 /* Send QueryCancel if we are processing a database query */
163 if (cancelConn != NULL)
164 {
165 if (PQcancel(cancelConn, errbuf, sizeof(errbuf)))
166 {
168 }
169 else
170 {
172 write_stderr(errbuf);
173 }
174 }
175}
volatile sig_atomic_t CancelRequested
Definition: cancel.c:59
static void(* cancel_callback)(void)
Definition: cancel.c:68
static const char * cancel_sent_msg
Definition: cancel.c:49
static PGcancel *volatile cancelConn
Definition: cancel.c:43
#define write_stderr(str)
Definition: cancel.c:31
static const char * cancel_not_sent_msg
Definition: cancel.c:50
int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize)
Definition: fe-cancel.c:463

References cancel_callback, cancel_not_sent_msg, cancel_sent_msg, cancelConn, CancelRequested, PQcancel(), and write_stderr.

Referenced by setup_cancel_handler().

◆ ResetCancelConn()

void ResetCancelConn ( void  )

Definition at line 107 of file cancel.c.

108{
109 PGcancel *oldCancelConn;
110
111#ifdef WIN32
112 EnterCriticalSection(&cancelConnLock);
113#endif
114
115 oldCancelConn = cancelConn;
116
117 /* be sure handle_sigint doesn't use pointer while freeing */
118 cancelConn = NULL;
119
120 if (oldCancelConn != NULL)
121 PQfreeCancel(oldCancelConn);
122
123#ifdef WIN32
124 LeaveCriticalSection(&cancelConnLock);
125#endif
126}
void PQfreeCancel(PGcancel *cancel)
Definition: fe-cancel.c:417

References cancelConn, and PQfreeCancel().

Referenced by CheckConnection(), consumeQueryResult(), do_connect(), do_lo_export(), do_lo_import(), do_lo_unlink(), executeMaintenanceCommand(), HandleCopyResult(), PSQLexec(), PSQLexecWatch(), runInitSteps(), SendQuery(), and wait_on_slots().

◆ SetCancelConn()

void SetCancelConn ( PGconn conn)

Definition at line 77 of file cancel.c.

78{
79 PGcancel *oldCancelConn;
80
81#ifdef WIN32
82 EnterCriticalSection(&cancelConnLock);
83#endif
84
85 /* Free the old one if we have one */
86 oldCancelConn = cancelConn;
87
88 /* be sure handle_sigint doesn't use pointer while freeing */
89 cancelConn = NULL;
90
91 if (oldCancelConn != NULL)
92 PQfreeCancel(oldCancelConn);
93
95
96#ifdef WIN32
97 LeaveCriticalSection(&cancelConnLock);
98#endif
99}
PGcancel * PQgetCancel(PGconn *conn)
Definition: fe-cancel.c:349
PGconn * conn
Definition: streamutil.c:53

References cancelConn, conn, PQfreeCancel(), and PQgetCancel().

Referenced by consumeQueryResult(), do_lo_export(), do_lo_import(), do_lo_unlink(), executeMaintenanceCommand(), HandleCopyResult(), PSQLexec(), PSQLexecWatch(), runInitSteps(), SendQuery(), and wait_on_slots().

◆ setup_cancel_handler()

void setup_cancel_handler ( void(*)(void)  query_cancel_callback)

Definition at line 183 of file cancel.c.

184{
185 cancel_callback = query_cancel_callback;
186 cancel_sent_msg = _("Cancel request sent\n");
187 cancel_not_sent_msg = _("Could not send cancel request: ");
188
189 pqsignal(SIGINT, handle_sigint);
190}
static void handle_sigint(SIGNAL_ARGS)
Definition: cancel.c:153
#define _(x)
Definition: elog.c:90
#define pqsignal
Definition: port.h:521

References _, cancel_callback, cancel_not_sent_msg, cancel_sent_msg, handle_sigint(), and pqsignal.

Referenced by main(), psql_setup_cancel_handler(), and runInitSteps().

Variable Documentation

◆ cancel_callback

void(* cancel_callback) (void) ( void  ) = NULL
static

Definition at line 68 of file cancel.c.

Referenced by handle_sigint(), and setup_cancel_handler().

◆ cancel_not_sent_msg

const char* cancel_not_sent_msg = NULL
static

Definition at line 50 of file cancel.c.

Referenced by handle_sigint(), and setup_cancel_handler().

◆ cancel_sent_msg

const char* cancel_sent_msg = NULL
static

Definition at line 49 of file cancel.c.

Referenced by handle_sigint(), and setup_cancel_handler().

◆ cancelConn

◆ CancelRequested

volatile sig_atomic_t CancelRequested = false