aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2018-10-12 03:22:09 +0200
committerKim Alvefur <zash@zash.se>2018-10-12 03:22:09 +0200
commit2bb3772374c54fbf8305763449e30185d4a6807d (patch)
tree8025d448365b2e79271bf088c41bb0afe8720b0d
parentafeb1f6f0292fa040718acca4460f049bd2a9a80 (diff)
downloadprosody-2bb3772374c54fbf8305763449e30185d4a6807d.tar.gz
prosody-2bb3772374c54fbf8305763449e30185d4a6807d.zip
net.server_epoll: Special handling of signal interrupts
-rw-r--r--net/server_epoll.lua2
-rw-r--r--util-src/poll.c5
2 files changed, 6 insertions, 1 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua
index cb83c8c3..0d05aee1 100644
--- a/net/server_epoll.lua
+++ b/net/server_epoll.lua
@@ -742,7 +742,7 @@ local function loop(once)
log("debug", "Removing unknown fd %d", fd);
poll:del(fd);
end
- elseif r ~= "timeout" then
+ elseif r ~= "timeout" and r ~= "signal" then
log("debug", "epoll_wait error: %s[%d]", r, w);
end
until once or (quitting and next(fds) == nil);
diff --git a/util-src/poll.c b/util-src/poll.c
index e5b5f70c..0ca0cf28 100644
--- a/util-src/poll.c
+++ b/util-src/poll.c
@@ -316,6 +316,11 @@ int Lwait(lua_State *L) {
lua_pushstring(L, "timeout");
return 2;
}
+ else if(ret < 0 && errno == EINTR) {
+ lua_pushnil(L);
+ lua_pushstring(L, "signal");
+ return 2;
+ }
else if(ret < 0) {
ret = errno;
lua_pushnil(L);