From 8b0c6b5317c122285f22abf35d9b739f7af807f5 Mon Sep 17 00:00:00 2001 From: XieHan Date: Mon, 11 Jan 2021 00:56:56 +0800 Subject: [PATCH 1/2] fix windows crash bug --- src/kernel_win/Communicator.cc | 4 +++- src/kernel_win/WinPoller.cc | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/kernel_win/Communicator.cc b/src/kernel_win/Communicator.cc index 94310e3a..547107b5 100644 --- a/src/kernel_win/Communicator.cc +++ b/src/kernel_win/Communicator.cc @@ -1051,7 +1051,7 @@ void Communicator::handle_incoming_idle(struct poller_result *res) ReadContext *ctx = (ReadContext *)res->data.context; CommConnEntry *entry = (CommConnEntry *)ctx->entry; CommTarget *target = entry->target; - CommSession *session = entry->session; + CommSession *session = NULL; int cs_state; target->mutex.lock(); @@ -1060,6 +1060,8 @@ void Communicator::handle_incoming_idle(struct poller_result *res) list_del(&entry->list); entry->state = CONN_STATE_FREE; } + else + session = entry->session; target->mutex.unlock(); diff --git a/src/kernel_win/WinPoller.cc b/src/kernel_win/WinPoller.cc index b45cf4df..18da1ccf 100644 --- a/src/kernel_win/WinPoller.cc +++ b/src/kernel_win/WinPoller.cc @@ -488,6 +488,11 @@ int WinPoller::get_io_result(struct poller_result *res, int timeout) res->state = PR_ST_ERROR; res->error = ENOENT; } + else if (bytes_transferred == 0) + { + res->state = PR_ST_FINISHED; + res->error = ECONNRESET; + } else { res->state = PR_ST_SUCCESS; From f25b8b6257808a70c972a32724f8c79aa58385f0 Mon Sep 17 00:00:00 2001 From: dengjun Date: Mon, 11 Jan 2021 14:21:49 +0800 Subject: [PATCH 2/2] fix mysql_cli without ignore tcp rst --- src/kernel_win/Communicator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kernel_win/Communicator.cc b/src/kernel_win/Communicator.cc index 547107b5..e73e9598 100644 --- a/src/kernel_win/Communicator.cc +++ b/src/kernel_win/Communicator.cc @@ -1223,6 +1223,7 @@ void Communicator::handle_request_result(struct poller_result *res) switch (res->state) { case PR_ST_SUCCESS: + case PR_ST_FINISHED: do { if (nleft >= buffer->len) @@ -1293,7 +1294,6 @@ void Communicator::handle_request_result(struct poller_result *res) break; - case PR_ST_FINISHED: case PR_ST_ERROR: case PR_ST_TIMEOUT: cs_state = CS_STATE_ERROR;