mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-23 19:43:09 +00:00
bugfix: mongo driver runCommand , and fix socket.close
This commit is contained in:
@@ -153,7 +153,14 @@ function socket.close(id)
|
||||
end
|
||||
if s.connected then
|
||||
driver.close(s.id)
|
||||
suspend(s)
|
||||
if s.co then
|
||||
-- reading this socket on another coroutine
|
||||
assert(not s.closing)
|
||||
s.closing = coroutine.running()
|
||||
skynet.wait()
|
||||
else
|
||||
suspend(s)
|
||||
end
|
||||
end
|
||||
if s.buffer then
|
||||
driver.clear(s.buffer,buffer_pool)
|
||||
@@ -162,6 +169,13 @@ function socket.close(id)
|
||||
socket_pool[id] = nil
|
||||
end
|
||||
|
||||
local function close_socket(s)
|
||||
if s.closing then
|
||||
skynet.wakeup(s.closing)
|
||||
end
|
||||
return driver.readall(s.buffer, buffer_pool)
|
||||
end
|
||||
|
||||
function socket.read(id, sz)
|
||||
local s = socket_pool[id]
|
||||
assert(s)
|
||||
@@ -170,7 +184,7 @@ function socket.read(id, sz)
|
||||
return ret
|
||||
end
|
||||
if not s.connected then
|
||||
return false, driver.readall(s.buffer, buffer_pool)
|
||||
return false, close_socket(s)
|
||||
end
|
||||
|
||||
assert(not s.read_required)
|
||||
@@ -180,7 +194,7 @@ function socket.read(id, sz)
|
||||
if ret then
|
||||
return ret
|
||||
else
|
||||
return false, driver.readall(s.buffer, buffer_pool)
|
||||
return false, close_socket(s)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -188,14 +202,14 @@ function socket.readall(id)
|
||||
local s = socket_pool[id]
|
||||
assert(s)
|
||||
if not s.connected then
|
||||
local r = driver.readall(s.buffer, buffer_pool)
|
||||
local r = close_socket(s)
|
||||
return r ~= "" and r
|
||||
end
|
||||
assert(not s.read_required)
|
||||
s.read_required = true
|
||||
suspend(s)
|
||||
assert(s.connected == false)
|
||||
return driver.readall(s.buffer, buffer_pool)
|
||||
return close_socket(s)
|
||||
end
|
||||
|
||||
function socket.readline(id, sep)
|
||||
@@ -207,7 +221,7 @@ function socket.readline(id, sep)
|
||||
return ret
|
||||
end
|
||||
if not s.connected then
|
||||
return false, driver.readall(s.buffer, buffer_pool)
|
||||
return false, close_socket(s)
|
||||
end
|
||||
assert(not s.read_required)
|
||||
s.read_required = sep
|
||||
@@ -215,7 +229,7 @@ function socket.readline(id, sep)
|
||||
if s.connected then
|
||||
return driver.readline(s.buffer, buffer_pool, sep)
|
||||
else
|
||||
return false, driver.readall(s.buffer, buffer_pool)
|
||||
return false, close_socket(s)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user