summaryrefslogtreecommitdiff
path: root/xmake/core
diff options
context:
space:
mode:
authorruki <[email protected]>2020-01-31 00:31:03 +0800
committerruki <[email protected]>2020-01-30 21:06:19 +0800
commit4d8a3d38c1a199a2cff62b3ae725b00bfc67a296 (patch)
treecfaf5d3f0f4dc771a747de7155554f716ff39aa2 /xmake/core
parent4e2bb608354145ac86d85b418e9a2319eaed189e (diff)
improve scheduler and socket connect
Diffstat (limited to 'xmake/core')
-rw-r--r--xmake/core/base/scheduler.lua23
-rw-r--r--xmake/core/base/socket.lua8
-rw-r--r--xmake/core/sandbox/modules/import/core/base/socket.lua8
3 files changed, 26 insertions, 13 deletions
diff --git a/xmake/core/base/scheduler.lua b/xmake/core/base/scheduler.lua
index 98a63f2c4..5a92863b8 100644
--- a/xmake/core/base/scheduler.lua
+++ b/xmake/core/base/scheduler.lua
@@ -146,7 +146,7 @@ function scheduler:_poller_resume_co(co, events)
-- resume this coroutine task
self:_co_tasks_suspended():remove(co)
- self:co_resume(co, (bit.band(events, poller.EV_POLLER_ERROR) ~= 0) and -1 or events)
+ return self:co_resume(co, (bit.band(events, poller.EV_POLLER_ERROR) ~= 0) and -1 or events)
end
-- the poller events callback
@@ -176,17 +176,23 @@ function scheduler:_poller_events_cb(obj, events)
if co_recv and co_recv == co_send then
pollerdata.co_recv = nil
pollerdata.co_send = nil
- self:_poller_resume_co(co_recv, events)
+ return self:_poller_resume_co(co_recv, events)
else
if co_recv then
pollerdata.co_recv = nil
- self:_poller_resume_co(co_recv, bit.band(events, bit.bnot(poller.EV_POLLER_SEND)))
+ local ok, errors = self:_poller_resume_co(co_recv, bit.band(events, bit.bnot(poller.EV_POLLER_SEND)))
+ if not ok then
+ return false, errors
+ end
events = bit.band(events, bit.bnot(poller.EV_POLLER_RECV))
end
if co_send then
pollerdata.co_send = nil
- self:_poller_resume_co(co_send, bit.band(events, bit.bnot(poller.EV_POLLER_RECV)))
+ local ok, errors = self:_poller_resume_co(co_send, bit.band(events, bit.bnot(poller.EV_POLLER_RECV)))
+ if not ok then
+ return false, errors
+ end
events = bit.band(events, bit.bnot(poller.EV_POLLER_SEND))
end
@@ -196,6 +202,7 @@ function scheduler:_poller_events_cb(obj, events)
pollerdata.poller_events_save = events_prev_save
end
end
+ return true
end
-- get all suspended coroutine tasks
@@ -498,9 +505,15 @@ function scheduler:runloop()
local objevents = e[2]
local eventfunc = e[3]
if eventfunc then
- eventfunc(self, obj, objevents)
+ ok, errors = eventfunc(self, obj, objevents)
+ if not ok then
+ break
+ end
end
end
+ if not ok then
+ break
+ end
-- spank the timer and trigger all timeout tasks
self:_timer():next()
diff --git a/xmake/core/base/socket.lua b/xmake/core/base/socket.lua
index 7669ac455..079959538 100644
--- a/xmake/core/base/socket.lua
+++ b/xmake/core/base/socket.lua
@@ -666,7 +666,7 @@ function socket.bind(addr, port, opt)
local ok, errors = sock:bind(addr, port)
if not ok then
sock:close()
- return nil, string.format("bind %s:%s failed, errors: %s!", addr, port, errors or "")
+ return nil, string.format("bind %s:%s failed, errors: %s!", addr, port, errors or "unknown")
end
return sock
end
@@ -680,7 +680,7 @@ function socket.bind_unix(addr, opt)
local ok, errors = sock:bind_unix(addr, opt)
if not ok then
sock:close()
- return nil, string.format("bind unix://%s failed, errors: %s!", addr, errors or "")
+ return nil, string.format("bind unix://%s failed, errors: %s!", addr, errors or "unknown")
end
return sock
end
@@ -694,7 +694,7 @@ function socket.connect(addr, port, opt)
local ok, errors = sock:connect(addr, port, opt)
if ok <= 0 then
sock:close()
- return nil, string.format("connect %s:%s failed, errors: %s!", addr, port, errors or "")
+ return nil, errors
end
return sock
end
@@ -708,7 +708,7 @@ function socket.connect_unix(addr, opt)
local ok, errors = sock:connect_unix(addr, opt)
if ok <= 0 then
sock:close()
- return nil, string.format("connect unix://%s failed, errors: %s!", addr, errors or "")
+ return nil, errors
end
return sock
end
diff --git a/xmake/core/sandbox/modules/import/core/base/socket.lua b/xmake/core/sandbox/modules/import/core/base/socket.lua
index cc028c284..1198fba55 100644
--- a/xmake/core/sandbox/modules/import/core/base/socket.lua
+++ b/xmake/core/sandbox/modules/import/core/base/socket.lua
@@ -224,19 +224,19 @@ end
-- open and connect tcp socket
function sandbox_core_base_socket.connect(addr, port, opt)
local sock, errors = socket.connect(addr, port, opt)
- if not sock then
+ if not sock and errors then
raise(errors)
end
- return _socket_wrap(sock)
+ return sock and _socket_wrap(sock) or nil
end
-- open and connect tcp socket from the unix socket
function sandbox_core_base_socket.connect_unix(addr, opt)
local sock, errors = socket.connect_unix(addr, opt)
- if not sock then
+ if not sock and errors then
raise(errors)
end
- return _socket_wrap(sock)
+ return sock and _socket_wrap(sock) or nil
end
-- return module