57 (microsec < 500 ? 1 : (microsec + 500) / 1000))
72 HANDLE signal_thread_handle;
88 (
errmsg_internal(
"could not create signal event: error code %lu", GetLastError())));
91 signal_thread_handle = CreateThread(NULL, 0,
pg_signal_thread, NULL, 0, NULL);
92 if (signal_thread_handle == NULL)
188 snprintf(pipename,
sizeof(pipename),
"\\\\.\\pipe\\pgsignal_%u", (
int) pid);
190 pipe = CreateNamedPipe(pipename, PIPE_ACCESS_DUPLEX,
191 PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
192 PIPE_UNLIMITED_INSTANCES, 16, 16, 1000, NULL);
194 if (pipe == INVALID_HANDLE_VALUE)
196 (
errmsg(
"could not create signal listener pipe for PID %d: error code %lu",
197 (
int) pid, GetLastError())));
236 snprintf(pipename,
sizeof(pipename),
"\\\\.\\pipe\\pgsignal_%lu", GetCurrentProcessId());
243 if (pipe == INVALID_HANDLE_VALUE)
245 pipe = CreateNamedPipe(pipename, PIPE_ACCESS_DUPLEX,
246 PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
247 PIPE_UNLIMITED_INSTANCES, 16, 16, 1000, NULL);
249 if (pipe == INVALID_HANDLE_VALUE)
251 write_stderr(
"could not create signal listener pipe: error code %lu; retrying\n", GetLastError());
262 fConnected = ConnectNamedPipe(pipe, NULL) ? TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);
271 if (ReadFile(pipe, &sigNum, 1, &bytes, NULL) &&
289 WriteFile(pipe, &sigNum, 1, &bytes, NULL);
298 FlushFileBuffers(pipe);
310 DisconnectNamedPipe(pipe);
323 pipe = INVALID_HANDLE_VALUE;
335 if (dwCtrlType == CTRL_C_EVENT ||
336 dwCtrlType == CTRL_BREAK_EVENT ||
337 dwCtrlType == CTRL_CLOSE_EVENT ||
338 dwCtrlType == CTRL_SHUTDOWN_EVENT)
static BOOL WINAPI pg_console_handler(DWORD dwCtrlType)
void pgwin32_signal_initialize(void)
void(* pqsigfunc)(int signo)
int pqsigsetmask(int mask)
def bytes(source, encoding='ascii', errors='strict')
volatile int pg_signal_queue
#define write_stderr(str)
HANDLE pgwin32_initial_signal_pipe
#define UNBLOCKED_SIGNAL_QUEUE()
void pg_usleep(long microsec)
HANDLE pgwin32_signal_event
void pgwin32_dispatch_queued_signals(void)
static CRITICAL_SECTION pg_signal_crit_sec
static pqsigfunc pg_signal_defaults[PG_SIGNAL_COUNT]
#define ereport(elevel,...)
pqsigfunc pqsignal(int signum, pqsigfunc handler)
int errmsg_internal(const char *fmt,...)
#define Assert(condition)
void pg_queue_signal(int signum)
static pqsigfunc pg_signal_array[PG_SIGNAL_COUNT]
int errmsg(const char *fmt,...)
HANDLE pgwin32_create_signal_listener(pid_t pid)
static DWORD WINAPI pg_signal_thread(LPVOID param)