31 #define write_stderr(str) \ 33 const char *str_ = (str); \ 35 rc_ = write(fileno(stderr), str_, strlen(str_)); \ 55 static CRITICAL_SECTION cancelConnLock;
75 EnterCriticalSection(&cancelConnLock);
84 if (oldCancelConn != NULL)
90 LeaveCriticalSection(&cancelConnLock);
105 EnterCriticalSection(&cancelConnLock);
113 if (oldCancelConn != NULL)
117 LeaveCriticalSection(&cancelConnLock);
148 int save_errno = errno;
157 if (cancelConn != NULL)
159 if (
PQcancel(cancelConn, errbuf,
sizeof(errbuf)))
188 consoleHandler(DWORD dwCtrlType)
192 if (dwCtrlType == CTRL_C_EVENT ||
193 dwCtrlType == CTRL_BREAK_EVENT)
201 EnterCriticalSection(&cancelConnLock);
202 if (cancelConn != NULL)
204 if (
PQcancel(cancelConn, errbuf,
sizeof(errbuf)))
215 LeaveCriticalSection(&cancelConnLock);
229 InitializeCriticalSection(&cancelConnLock);
231 SetConsoleCtrlHandler(consoleHandler, TRUE);
static void(* cancel_callback)(void)
void ResetCancelConn(void)
void PQfreeCancel(PGcancel *cancel)
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
PGcancel * PQgetCancel(PGconn *conn)
void SetCancelConn(PGconn *conn)
#define write_stderr(str)
pqsigfunc pqsignal(int signum, pqsigfunc handler)
int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize)
volatile sig_atomic_t CancelRequested
static PGcancel *volatile cancelConn
void setup_cancel_handler(void(*callback)(void))
static void handle_sigint(SIGNAL_ARGS)