diff options
author | pbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-08-07 17:57:36 +0000 |
---|---|---|
committer | pbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-08-07 17:57:36 +0000 |
commit | b3ada1540827c60a63058570a94a57dfd260ad11 (patch) | |
tree | 4111b0516651b8faa696542ec02b30fad770c879 /voice_engine/voe_network_impl.cc | |
parent | d7b06eca993d068de0d579a83511640d74ab9f77 (diff) | |
download | webrtc-b3ada1540827c60a63058570a94a57dfd260ad11.tar.gz |
Ref-counted rewrite of ChannelManager.
The complexity of the last ChannelManager and potentially usage of it as well caused race conditions and deadlocks in loopback voe_auto_test. This ref-counted solution takes no long-term locks, uses less locks overall and is significantly easier to understand.
ScopedChannel has been split up into a ChannelOwner with a reference to a channel and an Iterator over ChannelManager. Previous code was really used for both things. ChannelOwner is used as a shared pointer to a channel object, while an Iterator should work as expected.
BUG=2081
R=tommi@webrtc.org, xians@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/1802004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@4502 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'voice_engine/voe_network_impl.cc')
-rw-r--r-- | voice_engine/voe_network_impl.cc | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/voice_engine/voe_network_impl.cc b/voice_engine/voe_network_impl.cc index 62521706..615fd6a0 100644 --- a/voice_engine/voe_network_impl.cc +++ b/voice_engine/voe_network_impl.cc @@ -54,8 +54,8 @@ int VoENetworkImpl::RegisterExternalTransport(int channel, _shared->SetLastError(VE_NOT_INITED, kTraceError); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -74,8 +74,8 @@ int VoENetworkImpl::DeRegisterExternalTransport(int channel) _shared->SetLastError(VE_NOT_INITED, kTraceError); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -109,8 +109,8 @@ int VoENetworkImpl::ReceivedRTPPacket(int channel, "ReceivedRTPPacket() invalid data vector"); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -149,8 +149,8 @@ int VoENetworkImpl::ReceivedRTCPPacket(int channel, const void* data, "ReceivedRTCPPacket() invalid data vector"); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -187,8 +187,8 @@ int VoENetworkImpl::SetPacketTimeoutNotification(int channel, "SetPacketTimeoutNotification() invalid timeout size"); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -210,8 +210,8 @@ int VoENetworkImpl::GetPacketTimeoutNotification(int channel, _shared->SetLastError(VE_NOT_INITED, kTraceError); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -233,8 +233,8 @@ int VoENetworkImpl::RegisterDeadOrAliveObserver(int channel, _shared->SetLastError(VE_NOT_INITED, kTraceError); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -253,8 +253,8 @@ int VoENetworkImpl::DeRegisterDeadOrAliveObserver(int channel) _shared->SetLastError(VE_NOT_INITED, kTraceError); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -284,8 +284,8 @@ int VoENetworkImpl::SetPeriodicDeadOrAliveStatus(int channel, bool enable, "SetPeriodicDeadOrAliveStatus() invalid sample time"); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, @@ -307,8 +307,8 @@ int VoENetworkImpl::GetPeriodicDeadOrAliveStatus(int channel, _shared->SetLastError(VE_NOT_INITED, kTraceError); return -1; } - voe::ScopedChannel sc(_shared->channel_manager(), channel); - voe::Channel* channelPtr = sc.ChannelPtr(); + voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); + voe::Channel* channelPtr = ch.channel(); if (channelPtr == NULL) { _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |