From f01ea4f847380ede23131412d8f730da7c33244c Mon Sep 17 00:00:00 2001 From: Tommi Date: Tue, 19 Jan 2016 22:49:49 +0100 Subject: [PATCH] Remove use of ConditionVariableWrapper and CriticalSectionWrapper from UdpSocket2Windows. This helps with untangling CriticalSectionWrapper from ConditionVariableWrapper and looks like we can just delete ConditionVariableWrapper and use rtc::Event instead. BUG= R=pbos@webrtc.org Review URL: https://codereview.webrtc.org/1606993002 . Cr-Commit-Position: refs/heads/master@{#11309} --- .../test/channel_transport/udp_socket2_win.cc | 31 +++---------------- .../test/channel_transport/udp_socket2_win.h | 9 ++---- 2 files changed, 7 insertions(+), 33 deletions(-) diff --git a/webrtc/test/channel_transport/udp_socket2_win.cc b/webrtc/test/channel_transport/udp_socket2_win.cc index adeb46a9d2..2858c2d002 100644 --- a/webrtc/test/channel_transport/udp_socket2_win.cc +++ b/webrtc/test/channel_transport/udp_socket2_win.cc @@ -50,7 +50,7 @@ UdpSocket2Windows::UdpSocket2Windows(const int32_t id, _outstandingCallComplete(0), _terminate(false), _addedToMgr(false), - _safeTodelete(false), + delete_event_(true, false), _outstandingCallsDisabled(false), _clientHandle(NULL), _flowHandle(NULL), @@ -69,12 +69,9 @@ UdpSocket2Windows::UdpSocket2Windows(const int32_t id, _obj = NULL; _incomingCb = NULL; _socket = INVALID_SOCKET; - _pCrit = CriticalSectionWrapper::CreateCriticalSection(); _ptrCbRWLock = RWLockWrapper::CreateRWLock(); _ptrDestRWLock = RWLockWrapper::CreateRWLock(); _ptrSocketRWLock = RWLockWrapper::CreateRWLock(); - _ptrDeleteCrit = CriticalSectionWrapper::CreateCriticalSection(); - _ptrDeleteCond = ConditionVariableWrapper::CreateConditionVariable(); // Check if QoS is supported. BOOL bProtocolFound = FALSE; @@ -185,17 +182,13 @@ UdpSocket2Windows::~UdpSocket2Windows() WEBRTC_TRACE(kTraceMemory, kTraceTransport, _id, "UdpSocket2Windows::~UdpSocket2Windows()"); - WaitForOutstandingCalls(); + delete_event_.Wait(rtc::Event::kForever); + delete _ptrCbRWLock; - delete _ptrDeleteCrit; - delete _ptrDeleteCond; delete _ptrDestRWLock; delete _ptrSocketRWLock; - if(_pCrit) - delete _pCrit; - if (_flow) { free(_flow); @@ -667,7 +660,6 @@ void UdpSocket2Windows::CloseBlocking() // Reclaims the socket and prevents it from being used again. InvalidateSocket(); DisableNewOutstandingCalls(); - WaitForOutstandingCalls(); delete this; } @@ -1279,9 +1271,7 @@ void UdpSocket2Windows::OutstandingCallCompleted() { // Only one thread will enter here. The thread with the last outstanding // call. - CriticalSectionScoped cs(_ptrDeleteCrit); - _safeTodelete = true; - _ptrDeleteCond->Wake(); + delete_event_.Set(); } } @@ -1302,18 +1292,7 @@ void UdpSocket2Windows::DisableNewOutstandingCalls() if(noOutstandingCalls) { - CriticalSectionScoped cs(_ptrDeleteCrit); - _safeTodelete = true; - _ptrDeleteCond->Wake(); - } -} - -void UdpSocket2Windows::WaitForOutstandingCalls() -{ - CriticalSectionScoped cs(_ptrDeleteCrit); - while(!_safeTodelete) - { - _ptrDeleteCond->SleepCS(*_ptrDeleteCrit); + delete_event_.Set(); } } diff --git a/webrtc/test/channel_transport/udp_socket2_win.h b/webrtc/test/channel_transport/udp_socket2_win.h index ea37ac47c5..b41be9727d 100644 --- a/webrtc/test/channel_transport/udp_socket2_win.h +++ b/webrtc/test/channel_transport/udp_socket2_win.h @@ -19,9 +19,8 @@ #include #include +#include "webrtc/base/event.h" #include "webrtc/system_wrappers/include/atomic32.h" -#include "webrtc/system_wrappers/include/condition_variable_wrapper.h" -#include "webrtc/system_wrappers/include/critical_section_wrapper.h" #include "webrtc/system_wrappers/include/event_wrapper.h" #include "webrtc/system_wrappers/include/rw_lock_wrapper.h" #include "webrtc/system_wrappers/include/trace.h" @@ -133,22 +132,18 @@ private: int32_t _iProtocol; UdpSocket2ManagerWindows* _mgr; - CriticalSectionWrapper* _pCrit; Atomic32 _outstandingCalls; Atomic32 _outstandingCallComplete; volatile bool _terminate; volatile bool _addedToMgr; - CriticalSectionWrapper* _ptrDeleteCrit; - ConditionVariableWrapper* _ptrDeleteCond; - bool _safeTodelete; + rtc::Event delete_event_; RWLockWrapper* _ptrDestRWLock; bool _outstandingCallsDisabled; bool NewOutstandingCall(); void OutstandingCallCompleted(); void DisableNewOutstandingCalls(); - void WaitForOutstandingCalls(); void RemoveSocketFromManager();