| Index: webrtc/test/channel_transport/udp_socket2_win.cc
|
| diff --git a/webrtc/test/channel_transport/udp_socket2_win.cc b/webrtc/test/channel_transport/udp_socket2_win.cc
|
| index adeb46a9d2d064daae7515a590ac8564cf1e6587..2858c2d002d0795237fa04ffb67aa04daa4c1cd5 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();
|
| }
|
| }
|
|
|
|
|