| Index: content/renderer/p2p/port_allocator.cc
|
| diff --git a/content/renderer/p2p/port_allocator.cc b/content/renderer/p2p/port_allocator.cc
|
| index 73112ddb3d0876755bfaa3715a4a50866b8aee25..56876bab0cbf905996f9652f4c4914f33b74cde9 100644
|
| --- a/content/renderer/p2p/port_allocator.cc
|
| +++ b/content/renderer/p2p/port_allocator.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "content/public/common/content_switches.h"
|
| +#include "content/renderer/p2p/socket_dispatcher.h"
|
|
|
| namespace content {
|
|
|
| @@ -23,16 +24,18 @@ P2PPortAllocator::Config::RelayServerConfig::~RelayServerConfig() {
|
| }
|
|
|
| P2PPortAllocator::P2PPortAllocator(
|
| - P2PSocketDispatcher* socket_dispatcher,
|
| - rtc::NetworkManager* network_manager,
|
| + const scoped_refptr<P2PSocketDispatcher>& socket_dispatcher,
|
| + scoped_ptr<rtc::NetworkManager> network_manager,
|
| rtc::PacketSocketFactory* socket_factory,
|
| const Config& config,
|
| - const GURL& origin)
|
| - : cricket::BasicPortAllocator(network_manager, socket_factory),
|
| + const GURL& origin,
|
| + const scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
| + : cricket::BasicPortAllocator(network_manager.get(), socket_factory),
|
| + network_manager_(network_manager.Pass()),
|
| socket_dispatcher_(socket_dispatcher),
|
| config_(config),
|
| - origin_(origin)
|
| - {
|
| + origin_(origin),
|
| + network_manager_task_runner_(task_runner) {
|
| uint32 flags = 0;
|
| if (!config_.enable_multiple_routes)
|
| flags |= cricket::PORTALLOCATOR_DISABLE_ADAPTER_ENUMERATION;
|
| @@ -47,11 +50,17 @@ P2PPortAllocator::P2PPortAllocator(
|
| bool enable_webrtc_stun_origin =
|
| cmd_line->HasSwitch(switches::kEnableWebRtcStunOrigin);
|
| if (enable_webrtc_stun_origin) {
|
| - set_origin(origin.spec());
|
| + set_origin(origin_.spec());
|
| }
|
| }
|
|
|
| +// TODO(guoweis): P2PPortAllocator is also deleted in the wrong thread
|
| +// here. It's created in signaling thread, and held by webrtc::PeerConnection,
|
| +// only used on worker thread. The destructor is invoked on signaling thread
|
| +// again. crbug.com/535761. DeleteSoon can be removed once the bug is fixed.
|
| P2PPortAllocator::~P2PPortAllocator() {
|
| + network_manager_task_runner_->DeleteSoon(FROM_HERE,
|
| + network_manager_.release());
|
| }
|
|
|
| cricket::PortAllocatorSession* P2PPortAllocator::CreateSessionInternal(
|
|
|