Index: media/cast/test/utility/udp_proxy.cc |
diff --git a/media/cast/test/utility/udp_proxy.cc b/media/cast/test/utility/udp_proxy.cc |
index 5b07cf618c5eb1efa3d25fd51500170ed85ff443..5936ef5fe38f78dfb289d441e849628d3f1b932d 100644 |
--- a/media/cast/test/utility/udp_proxy.cc |
+++ b/media/cast/test/utility/udp_proxy.cc |
@@ -410,19 +410,33 @@ class UDPProxyImpl : public UDPProxy { |
destination_(destination), |
proxy_thread_("media::cast::test::UdpProxy Thread"), |
to_dest_pipe_(to_dest_pipe.Pass()), |
- from_dest_pipe_(to_dest_pipe.Pass()), |
- start_event_(false, false) { |
+ from_dest_pipe_(to_dest_pipe.Pass()) { |
proxy_thread_.StartWithOptions( |
base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); |
+ base::WaitableEvent start_event(false, false); |
proxy_thread_.message_loop_proxy()->PostTask( |
FROM_HERE, |
base::Bind(&UDPProxyImpl::Start, |
base::Unretained(this), |
+ base::Unretained(&start_event), |
net_log)); |
- start_event_.Wait(); |
+ start_event.Wait(); |
} |
- void Start(net::NetLog* net_log) { |
+ virtual ~UDPProxyImpl() { |
+ base::WaitableEvent stop_event(false, false); |
+ proxy_thread_.message_loop_proxy()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&UDPProxyImpl::Stop, |
+ base::Unretained(this), |
+ base::Unretained(&stop_event))); |
+ stop_event.Wait(); |
+ proxy_thread_.Stop(); |
+ } |
+ |
+ private: |
+ void Start(base::WaitableEvent* start_event, |
+ net::NetLog* net_log) { |
socket_.reset(new net::UDPSocket(net::DatagramSocket::DEFAULT_BIND, |
net::RandIntCallback(), |
net_log, |
@@ -438,12 +452,15 @@ class UDPProxyImpl : public UDPProxy { |
CHECK_GE(socket_->Bind(local_port_), 0); |
- start_event_.Signal(); |
+ start_event->Signal(); |
PollRead(); |
} |
- virtual ~UDPProxyImpl() { |
- proxy_thread_.Stop(); |
+ void Stop(base::WaitableEvent* stop_event) { |
+ to_dest_pipe_.reset(NULL); |
+ from_dest_pipe_.reset(NULL); |
+ socket_.reset(NULL); |
+ stop_event->Signal(); |
} |
void ProcessPacket(scoped_refptr<net::IOBuffer> recv_buf, |
@@ -488,7 +505,7 @@ class UDPProxyImpl : public UDPProxy { |
} |
} |
- private: |
+ |
net::IPEndPoint local_port_; |
net::IPEndPoint destination_; |
net::IPEndPoint recv_address_; |
@@ -497,7 +514,6 @@ class UDPProxyImpl : public UDPProxy { |
scoped_ptr<net::UDPSocket> socket_; |
scoped_ptr<PacketPipe> to_dest_pipe_; |
scoped_ptr<PacketPipe> from_dest_pipe_; |
- base::WaitableEvent start_event_; |
scoped_ptr<transport::Packet> packet_; |
}; |