From 0239e5357d87c3a0a1662938a028d6cf38db2f8c Mon Sep 17 00:00:00 2001 From: Daniel Collins Date: Tue, 16 Oct 2018 13:13:45 +0100 Subject: [PATCH] Add missing lock uses in DirectPlay8Peer --- src/DirectPlay8Peer.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/DirectPlay8Peer.cpp b/src/DirectPlay8Peer.cpp index abc9c7a..23e5ba8 100644 --- a/src/DirectPlay8Peer.cpp +++ b/src/DirectPlay8Peer.cpp @@ -103,6 +103,8 @@ ULONG DirectPlay8Peer::Release(void) HRESULT DirectPlay8Peer::Initialize(PVOID CONST pvUserContext, CONST PFNDPNMESSAGEHANDLER pfn, CONST DWORD dwFlags) { + std::unique_lock l(lock); + if(state != STATE_NEW) { return DPNERR_ALREADYINITIALIZED; @@ -717,6 +719,8 @@ HRESULT DirectPlay8Peer::GetSendQueueInfo(CONST DPNID dpnid, DWORD* CONST pdwNum HRESULT DirectPlay8Peer::Host(CONST DPN_APPLICATION_DESC* CONST pdnAppDesc, IDirectPlay8Address **CONST prgpDeviceInfo, CONST DWORD cDeviceInfo, CONST DPN_SECURITY_DESC* CONST pdnSecurity, CONST DPN_SECURITY_CREDENTIALS* CONST pdnCredentials, void* CONST pvPlayerContext, CONST DWORD dwFlags) { + std::unique_lock l(lock); + switch(state) { case STATE_NEW: return DPNERR_UNINITIALIZED; @@ -1539,6 +1543,8 @@ HRESULT DirectPlay8Peer::Close(CONST DWORD dwFlags) HRESULT DirectPlay8Peer::EnumHosts(PDPN_APPLICATION_DESC CONST pApplicationDesc, IDirectPlay8Address* CONST pAddrHost, IDirectPlay8Address* CONST pDeviceInfo,PVOID CONST pUserEnumData, CONST DWORD dwUserEnumDataSize, CONST DWORD dwEnumCount, CONST DWORD dwRetryInterval, CONST DWORD dwTimeOut,PVOID CONST pvUserContext, DPNHANDLE* CONST pAsyncHandle, CONST DWORD dwFlags) { + std::unique_lock l(lock); + if(state == STATE_NEW) { return DPNERR_UNINITIALIZED; @@ -1562,6 +1568,7 @@ HRESULT DirectPlay8Peer::EnumHosts(PDPN_APPLICATION_DESC CONST pApplicationDesc, result = r; }); + l.unlock(); he.wait(); return result; @@ -1571,8 +1578,6 @@ HRESULT DirectPlay8Peer::EnumHosts(PDPN_APPLICATION_DESC CONST pApplicationDesc, *pAsyncHandle = handle; - std::unique_lock l(lock); - host_enums.emplace( std::piecewise_construct, std::forward_as_tuple(handle),