Index: webrtc/api/peerconnection_unittest.cc |
diff --git a/webrtc/api/peerconnection_unittest.cc b/webrtc/api/peerconnection_unittest.cc |
index 67b4efbc73f8db9670f4f8c8e59343c91329272f..99be22f4591ad70e9c232463a5ec0b46d26bfd42 100644 |
--- a/webrtc/api/peerconnection_unittest.cc |
+++ b/webrtc/api/peerconnection_unittest.cc |
@@ -155,10 +155,11 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, |
const MediaConstraintsInterface* constraints, |
const PeerConnectionFactory::Options* options, |
rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store, |
- bool prefer_constraint_apis) { |
+ bool prefer_constraint_apis, |
+ rtc::Thread* worker_thread) { |
PeerConnectionTestClient* client(new PeerConnectionTestClient(id)); |
if (!client->Init(constraints, options, std::move(dtls_identity_store), |
- prefer_constraint_apis)) { |
+ prefer_constraint_apis, worker_thread)) { |
delete client; |
return nullptr; |
} |
@@ -168,24 +169,28 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, |
static PeerConnectionTestClient* CreateClient( |
const std::string& id, |
const MediaConstraintsInterface* constraints, |
- const PeerConnectionFactory::Options* options) { |
+ const PeerConnectionFactory::Options* options, |
+ rtc::Thread* worker_thread) { |
rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() |
: nullptr); |
- return CreateClientWithDtlsIdentityStore( |
- id, constraints, options, std::move(dtls_identity_store), true); |
+ return CreateClientWithDtlsIdentityStore(id, constraints, options, |
+ std::move(dtls_identity_store), |
+ true, worker_thread); |
} |
static PeerConnectionTestClient* CreateClientPreferNoConstraints( |
const std::string& id, |
- const PeerConnectionFactory::Options* options) { |
+ const PeerConnectionFactory::Options* options, |
+ rtc::Thread* worker_thread) { |
rtc::scoped_ptr<FakeDtlsIdentityStore> dtls_identity_store( |
rtc::SSLStreamAdapter::HaveDtlsSrtp() ? new FakeDtlsIdentityStore() |
: nullptr); |
- return CreateClientWithDtlsIdentityStore( |
- id, nullptr, options, std::move(dtls_identity_store), false); |
+ return CreateClientWithDtlsIdentityStore(id, nullptr, options, |
+ std::move(dtls_identity_store), |
+ false, worker_thread); |
} |
~PeerConnectionTestClient() { |
@@ -800,7 +805,8 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, |
const MediaConstraintsInterface* constraints, |
const PeerConnectionFactory::Options* options, |
rtc::scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store, |
- bool prefer_constraint_apis) { |
+ bool prefer_constraint_apis, |
+ rtc::Thread* worker_thread) { |
EXPECT_TRUE(!peer_connection_); |
EXPECT_TRUE(!peer_connection_factory_); |
if (!prefer_constraint_apis) { |
@@ -809,7 +815,7 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, |
prefer_constraint_apis_ = prefer_constraint_apis; |
rtc::scoped_ptr<cricket::PortAllocator> port_allocator( |
- new cricket::FakePortAllocator(rtc::Thread::Current(), nullptr)); |
+ new cricket::FakePortAllocator(worker_thread, nullptr)); |
fake_audio_capture_module_ = FakeAudioCaptureModule::Create(); |
if (fake_audio_capture_module_ == nullptr) { |
@@ -818,9 +824,8 @@ class PeerConnectionTestClient : public webrtc::PeerConnectionObserver, |
fake_video_decoder_factory_ = new FakeWebRtcVideoDecoderFactory(); |
fake_video_encoder_factory_ = new FakeWebRtcVideoEncoderFactory(); |
peer_connection_factory_ = webrtc::CreatePeerConnectionFactory( |
- rtc::Thread::Current(), rtc::Thread::Current(), |
- fake_audio_capture_module_, fake_video_encoder_factory_, |
- fake_video_decoder_factory_); |
+ worker_thread, rtc::Thread::Current(), fake_audio_capture_module_, |
+ fake_video_encoder_factory_, fake_video_decoder_factory_); |
if (!peer_connection_factory_) { |
return false; |
} |
@@ -1019,7 +1024,9 @@ class P2PTestConductor : public testing::Test { |
P2PTestConductor() |
: pss_(new rtc::PhysicalSocketServer), |
ss_(new rtc::VirtualSocketServer(pss_.get())), |
- ss_scope_(ss_.get()) {} |
+ ss_scope_(ss_.get()) { |
+ RTC_CHECK(worker_thread_.Start()); |
+ } |
bool SessionActive() { |
return initiating_client_->SessionActive() && |
@@ -1127,11 +1134,11 @@ class P2PTestConductor : public testing::Test { |
bool CreateTestClientsThatPreferNoConstraints() { |
initiating_client_.reset( |
- PeerConnectionTestClient::CreateClientPreferNoConstraints("Caller: ", |
- nullptr)); |
+ PeerConnectionTestClient::CreateClientPreferNoConstraints( |
+ "Caller: ", nullptr, &worker_thread_)); |
receiving_client_.reset( |
- PeerConnectionTestClient::CreateClientPreferNoConstraints("Callee: ", |
- nullptr)); |
+ PeerConnectionTestClient::CreateClientPreferNoConstraints( |
+ "Callee: ", nullptr, &worker_thread_)); |
if (!initiating_client_ || !receiving_client_) { |
return false; |
} |
@@ -1151,9 +1158,9 @@ class P2PTestConductor : public testing::Test { |
MediaConstraintsInterface* recv_constraints, |
PeerConnectionFactory::Options* recv_options) { |
initiating_client_.reset(PeerConnectionTestClient::CreateClient( |
- "Caller: ", init_constraints, init_options)); |
+ "Caller: ", init_constraints, init_options, &worker_thread_)); |
receiving_client_.reset(PeerConnectionTestClient::CreateClient( |
- "Callee: ", recv_constraints, recv_options)); |
+ "Callee: ", recv_constraints, recv_options, &worker_thread_)); |
if (!initiating_client_ || !receiving_client_) { |
return false; |
} |
@@ -1254,7 +1261,8 @@ class P2PTestConductor : public testing::Test { |
// Make sure the new client is using a different certificate. |
return PeerConnectionTestClient::CreateClientWithDtlsIdentityStore( |
"New Peer: ", &setup_constraints, nullptr, |
- std::move(dtls_identity_store), prefer_constraint_apis_); |
+ std::move(dtls_identity_store), prefer_constraint_apis_, |
+ &worker_thread_); |
} |
void SendRtpData(webrtc::DataChannelInterface* dc, const std::string& data) { |
@@ -1294,6 +1302,9 @@ class P2PTestConductor : public testing::Test { |
} |
private: |
+ // |worker_thread_| is used by both |initiating_client_| and |
+ // |receiving_client_|. Must be destroyed last. |
nisse-webrtc
2016/04/05 11:03:43
Relying on the order of instance variables?
|
+ rtc::Thread worker_thread_; |
rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_; |
rtc::scoped_ptr<rtc::VirtualSocketServer> ss_; |
rtc::SocketServerScope ss_scope_; |