void NamedPipe::Close() { base::AutoLock guard(lock_); CloseHandle(pipe_); pipe_ = INVALID_HANDLE_VALUE; if (io_ != nullptr) { auto local_io = io_; io_ = nullptr; base::AutoUnlock unlock(lock_); WaitForThreadpoolIoCallbacks(local_io, FALSE); CloseThreadpoolIo(local_io); } }
void Server::Destroy() { m_ShuttingDown = true; if (m_AcceptTPWORK != NULL) { WaitForThreadpoolWorkCallbacks(m_AcceptTPWORK, true); CloseThreadpoolWork(m_AcceptTPWORK); m_AcceptTPWORK = NULL; } if (m_listenSocket != INVALID_SOCKET) { Network::CloseSocket(m_listenSocket); CancelIoEx(reinterpret_cast<HANDLE>(m_listenSocket), NULL); m_listenSocket = INVALID_SOCKET; } if (m_pTPIO != NULL) { WaitForThreadpoolIoCallbacks(m_pTPIO, true); CloseThreadpoolIo(m_pTPIO); m_pTPIO = NULL; } if (m_ClientTPCLEAN != NULL) { CloseThreadpoolCleanupGroupMembers(m_ClientTPCLEAN, false, NULL); CloseThreadpoolCleanupGroup(m_ClientTPCLEAN); DestroyThreadpoolEnvironment(&m_ClientTPENV); m_ClientTPCLEAN = NULL; } EnterCriticalSection(&m_CSForClients); for (auto client : m_Clients) { delete client; } m_Clients.clear(); LeaveCriticalSection(&m_CSForClients); DeleteCriticalSection(&m_CSForClients); }
void NamedPipeChannel::Close() { base::AutoLock guard(lock_); if (handle_ != INVALID_HANDLE_VALUE) { CloseHandle(handle_); handle_ = INVALID_HANDLE_VALUE; end_point_ = EndPoint::kUnknown; } if (io_ != nullptr) { auto local_io = io_; io_ = nullptr; { base::AutoUnlock unlock(lock_); WaitForThreadpoolIoCallbacks(local_io, FALSE); } CloseThreadpoolIo(local_io); } }