Fix race when deleting video receive streams in Call.
BUG= R=mflodman@webrtc.org, pbos@webrtc.org Review URL: https://webrtc-codereview.appspot.com/6889004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5457 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
f7c6e743b3
commit
094ac39b5a
@ -312,6 +312,8 @@ void Call::DestroyVideoReceiveStream(
|
||||
receive_ssrcs_.begin();
|
||||
while (it != receive_ssrcs_.end()) {
|
||||
if (it->second == static_cast<VideoReceiveStream*>(receive_stream)) {
|
||||
assert(receive_stream_impl == NULL ||
|
||||
receive_stream_impl == it->second);
|
||||
receive_stream_impl = it->second;
|
||||
receive_ssrcs_.erase(it++);
|
||||
} else {
|
||||
@ -365,19 +367,14 @@ bool Call::DeliverRtcp(const uint8_t* packet, size_t length) {
|
||||
bool Call::DeliverRtp(const RTPHeader& header,
|
||||
const uint8_t* packet,
|
||||
size_t length) {
|
||||
VideoReceiveStream* receiver;
|
||||
{
|
||||
ReadLockScoped read_lock(*receive_lock_);
|
||||
std::map<uint32_t, VideoReceiveStream*>::iterator it =
|
||||
receive_ssrcs_.find(header.ssrc);
|
||||
if (it == receive_ssrcs_.end()) {
|
||||
// TODO(pbos): Log some warning, SSRC without receiver.
|
||||
return false;
|
||||
}
|
||||
|
||||
receiver = it->second;
|
||||
ReadLockScoped read_lock(*receive_lock_);
|
||||
std::map<uint32_t, VideoReceiveStream*>::iterator it =
|
||||
receive_ssrcs_.find(header.ssrc);
|
||||
if (it == receive_ssrcs_.end()) {
|
||||
// TODO(pbos): Log some warning, SSRC without receiver.
|
||||
return false;
|
||||
}
|
||||
return receiver->DeliverRtp(static_cast<const uint8_t*>(packet), length);
|
||||
return it->second->DeliverRtp(static_cast<const uint8_t*>(packet), length);
|
||||
}
|
||||
|
||||
bool Call::DeliverPacket(const uint8_t* packet, size_t length) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user