From ceafc06108de21b66cb3ea9a96a282d24ed15f4d Mon Sep 17 00:00:00 2001 From: __mk_km__ Date: Mon, 9 Oct 2023 15:01:55 +0500 Subject: [PATCH] Fix named pipes On connected callback was called too early(overlapped wasn't awaited) Also added a DsiconnectNamedPipe during destruction --- server/lib/named_pipe/named_pipe_win.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/server/lib/named_pipe/named_pipe_win.h b/server/lib/named_pipe/named_pipe_win.h index 4b9225d..dc890d1 100644 --- a/server/lib/named_pipe/named_pipe_win.h +++ b/server/lib/named_pipe/named_pipe_win.h @@ -146,8 +146,6 @@ class NamedPipeListener : public INamedPipeListener { if (!Connect(&listener_data)) return; - if (thread_active_) on_event_callback_({NamedPipeListenerEventType::ClientConnected}); - while (thread_active_) { switch (WaitForSingleObject(listener_data.overlap.hEvent, 5)) { case WAIT_OBJECT_0: @@ -177,6 +175,13 @@ class NamedPipeListener : public INamedPipeListener { LogError("GetOverlappedResult failed"); break; } + + if (listener_data.state == NamedPipeListenerState::Connecting) { + if (thread_active_) { + on_event_callback_({NamedPipeListenerEventType::ClientConnected}); + } + } + listener_data.state = NamedPipeListenerState::Reading; } } @@ -205,6 +210,7 @@ class NamedPipeListener : public INamedPipeListener { } } + DisconnectNamedPipe(hPipeInst); // Not 100% sure this is needed, but winapi seems to like this better CloseHandle(hPipeInst); CloseHandle(hEvent); } @@ -216,4 +222,4 @@ class NamedPipeListener : public INamedPipeListener { std::function on_event_callback_; std::function on_data_callback_; -}; \ No newline at end of file +};