62 SleepEx((microsec < 500 ? 1 : (microsec + 500) / 1000), FALSE);
67 (microsec < 500 ? 1 : (microsec + 500) / 1000))
82 HANDLE signal_thread_handle;
98 (
errmsg_internal(
"could not create signal event: error code %lu", GetLastError())));
101 signal_thread_handle = CreateThread(NULL, 0,
pg_signal_thread, NULL, 0, NULL);
102 if (signal_thread_handle == NULL)
198 snprintf(pipename,
sizeof(pipename),
"\\\\.\\pipe\\pgsignal_%u", (
int) pid);
200 pipe = CreateNamedPipe(pipename, PIPE_ACCESS_DUPLEX,
201 PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
202 PIPE_UNLIMITED_INSTANCES, 16, 16, 1000, NULL);
204 if (pipe == INVALID_HANDLE_VALUE)
206 (
errmsg(
"could not create signal listener pipe for PID %d: error code %lu",
207 (
int) pid, GetLastError())));
246 snprintf(pipename,
sizeof(pipename),
"\\\\.\\pipe\\pgsignal_%lu", GetCurrentProcessId());
253 if (pipe == INVALID_HANDLE_VALUE)
255 pipe = CreateNamedPipe(pipename, PIPE_ACCESS_DUPLEX,
256 PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
257 PIPE_UNLIMITED_INSTANCES, 16, 16, 1000, NULL);
259 if (pipe == INVALID_HANDLE_VALUE)
261 write_stderr(
"could not create signal listener pipe: error code %lu; retrying\n", GetLastError());
272 fConnected = ConnectNamedPipe(pipe, NULL) ? TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);
281 if (ReadFile(pipe, &sigNum, 1, &bytes, NULL) &&
299 WriteFile(pipe, &sigNum, 1, &bytes, NULL);
308 FlushFileBuffers(pipe);
320 DisconnectNamedPipe(pipe);
333 pipe = INVALID_HANDLE_VALUE;
345 if (dwCtrlType == CTRL_C_EVENT ||
346 dwCtrlType == CTRL_BREAK_EVENT ||
347 dwCtrlType == CTRL_CLOSE_EVENT ||
348 dwCtrlType == CTRL_SHUTDOWN_EVENT)
#define write_stderr(str)
int errmsg_internal(const char *fmt,...)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Assert(fmt[strlen(fmt) - 1] !='\n')
void(* pqsigfunc)(int signo)
HANDLE pgwin32_create_signal_listener(pid_t pid)
static DWORD WINAPI pg_signal_thread(LPVOID param)
void pg_queue_signal(int signum)
void pg_usleep(long microsec)
volatile int pg_signal_queue
HANDLE pgwin32_initial_signal_pipe
static pqsigfunc pg_signal_array[PG_SIGNAL_COUNT]
static CRITICAL_SECTION pg_signal_crit_sec
static BOOL WINAPI pg_console_handler(DWORD dwCtrlType)
static pqsigfunc pg_signal_defaults[PG_SIGNAL_COUNT]
void pgwin32_dispatch_queued_signals(void)
HANDLE pgwin32_signal_event
int pqsigsetmask(int mask)
void pgwin32_signal_initialize(void)
pqsigfunc pqsignal(int signum, pqsigfunc handler)
#define UNBLOCKED_SIGNAL_QUEUE()