diff options
Diffstat (limited to 'devel/electron37/files/patch-electron_shell_common_node__bindings__linux.cc')
-rw-r--r-- | devel/electron37/files/patch-electron_shell_common_node__bindings__linux.cc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/devel/electron37/files/patch-electron_shell_common_node__bindings__linux.cc b/devel/electron37/files/patch-electron_shell_common_node__bindings__linux.cc new file mode 100644 index 000000000000..0dabd6390a8d --- /dev/null +++ b/devel/electron37/files/patch-electron_shell_common_node__bindings__linux.cc @@ -0,0 +1,69 @@ +--- electron/shell/common/node_bindings_linux.cc.orig 2023-10-20 08:29:17 UTC ++++ electron/shell/common/node_bindings_linux.cc +@@ -4,12 +4,25 @@ + + #include "shell/common/node_bindings_linux.h" + ++#if !defined(OS_BSD) + #include <sys/epoll.h> ++#else ++#include <errno.h> ++#include <sys/select.h> ++#include <sys/sysctl.h> ++#include <sys/time.h> ++#include <sys/types.h> ++#endif + + namespace electron { + + NodeBindingsLinux::NodeBindingsLinux(BrowserEnvironment browser_env) ++#if !defined(OS_BSD) + : NodeBindings(browser_env), epoll_(epoll_create(1)) { ++#else ++ : NodeBindings(browser_env) { ++#endif ++#if !defined(OS_BSD) + auto* const event_loop = uv_loop(); + + int backend_fd = uv_backend_fd(event_loop); +@@ -17,11 +30,13 @@ NodeBindingsLinux::NodeBindingsLinux(BrowserEnvironmen + ev.events = EPOLLIN; + ev.data.fd = backend_fd; + epoll_ctl(epoll_, EPOLL_CTL_ADD, backend_fd, &ev); ++#endif + } + + void NodeBindingsLinux::PollEvents() { + auto* const event_loop = uv_loop(); + ++#if !defined(OS_BSD) + int timeout = uv_backend_timeout(event_loop); + + // Wait for new libuv events. +@@ -30,6 +45,26 @@ void NodeBindingsLinux::PollEvents() { + struct epoll_event ev; + r = epoll_wait(epoll_, &ev, 1, timeout); + } while (r == -1 && errno == EINTR); ++#else ++ struct timeval tv; ++ int timeout = uv_backend_timeout(event_loop); ++ if (timeout != -1) { ++ tv.tv_sec = timeout / 1000; ++ tv.tv_usec = (timeout % 1000) * 1000; ++ } ++ ++ fd_set readset; ++ int fd = uv_backend_fd(event_loop); ++ FD_ZERO(&readset); ++ FD_SET(fd, &readset); ++ ++ // Wait for new libuv events. ++ int r; ++ do { ++ r = select(fd + 1, &readset, nullptr, nullptr, ++ timeout == -1 ? nullptr : &tv); ++ } while (r == -1 && errno == EINTR); ++#endif + } + + // static |