From f0d24ac718e0cfc2e47c9a491bce63800fe11a61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Thu, 15 Apr 2021 10:52:57 +0800 Subject: [PATCH] Bugfix #1385 (#1387) --- lualib/skynet/socketchannel.lua | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lualib/skynet/socketchannel.lua b/lualib/skynet/socketchannel.lua index a7d2393d..6849dc6f 100644 --- a/lualib/skynet/socketchannel.lua +++ b/lualib/skynet/socketchannel.lua @@ -125,6 +125,17 @@ local function pop_response(self) end self.__wait_response = coroutine.running() skynet.wait(self.__wait_response) + if not self.__sock then + -- disconnected before request, terminate dispatch_by_order + return + end + end +end + +local function wakeup_response(self) + if self.__wait_response then + skynet.wakeup(self.__wait_response) + self.__wait_response = nil end end @@ -135,6 +146,7 @@ local function autoclose_cb(self, fd) -- closed by peer skynet.error("socket closed by peer : ", self.__host, self.__port) close_channel_socket(self) + wakeup_response(self) end end @@ -146,10 +158,7 @@ local function push_response(self, response, co) -- response is a function, push it to __request table.insert(self.__request, response) table.insert(self.__thread, co) - if self.__wait_response then - skynet.wakeup(self.__wait_response) - self.__wait_response = nil - end + wakeup_response(self) end end @@ -423,12 +432,12 @@ local function block_connect(self, once) else self.__connecting[1] = true err = try_connect(self, once) - self.__connecting[1] = nil for i=2, #self.__connecting do local co = self.__connecting[i] self.__connecting[i] = nil skynet.wakeup(co) end + self.__connecting[1] = nil end r = check_connection(self)