Index: net/proxy/multi_threaded_proxy_resolver.cc |
diff --git a/net/proxy/multi_threaded_proxy_resolver.cc b/net/proxy/multi_threaded_proxy_resolver.cc |
index ad1228c90b9a55a427022f97faf04230cd779e1d..c5922725e63daffaf0c76058242b29047a4fa353 100644 |
--- a/net/proxy/multi_threaded_proxy_resolver.cc |
+++ b/net/proxy/multi_threaded_proxy_resolver.cc |
@@ -8,6 +8,7 @@ |
#include "base/string_util.h" |
#include "base/stringprintf.h" |
#include "base/threading/thread.h" |
+#include "base/threading/thread_restrictions.h" |
#include "net/base/net_errors.h" |
#include "net/base/net_log.h" |
#include "net/proxy/proxy_info.h" |
@@ -337,7 +338,12 @@ void MultiThreadedProxyResolver::Executor::Destroy() { |
resolver_->Shutdown(); |
// Join the worker thread. |
- thread_.reset(); |
+ { |
+ // Allow IO because joining can block for a long time and is required |
+ // by thread destructor. |
+ base::ThreadRestrictions::ScopedAllowIO allow_io; |
+ thread_.reset(); |
+ } |
// Cancel any outstanding job. |
if (outstanding_job_) { |