Commit 45473979 authored by Kirill Smelkov's avatar Kirill Smelkov

os/signal: Use windows-specific code to turn wakeup pipe into nonblocking mode

There is no fcntl on windows. Named pipes can be set into nonblocking
mode via SetNamedPipeHandleState(PIPE_NOWAIT).
parent acc6c3f1
...@@ -89,6 +89,10 @@ ...@@ -89,6 +89,10 @@
#include <atomic> #include <atomic>
#include <tuple> #include <tuple>
#if defined(_WIN32)
# include <windows.h>
#endif
#define DEBUG 0 #define DEBUG 0
#if DEBUG #if DEBUG
...@@ -190,8 +194,15 @@ void _init() { ...@@ -190,8 +194,15 @@ void _init() {
if (err != nil) if (err != nil)
panic("os::newFile(_wakerx"); panic("os::newFile(_wakerx");
_waketx = vfd[1]; _waketx = vfd[1];
#ifndef _WIN32
if (sys::Fcntl(_waketx, F_SETFL, O_NONBLOCK) < 0) if (sys::Fcntl(_waketx, F_SETFL, O_NONBLOCK) < 0)
panic("fcntl(_waketx, O_NONBLOCK)"); // TODO +syserr panic("fcntl(_waketx, O_NONBLOCK)"); // TODO +syserr
#else
HANDLE hwaketx = (HANDLE)_get_osfhandle(_waketx);
DWORD mode = PIPE_READMODE_BYTE | PIPE_NOWAIT;
if (!SetNamedPipeHandleState(hwaketx, &mode, NULL, NULL))
panic("SetNamedPipeHandleState(hwaketx, PIPE_NOWAIT)"); // TODO +syserr
#endif
_actIgnore.sa_handler = SIG_IGN; _actIgnore.sa_handler = SIG_IGN;
_actIgnore.sa_flags = 0; _actIgnore.sa_flags = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment