[tor-commits] [tor-launcher/master] Bug 34164: Tor Launcher deadlocks during startup (Firefox 77)
gk at torproject.org
gk at torproject.org
Wed Jun 10 18:57:54 UTC 2020
commit 98f3df12d48daf277f2e3f056600c64294c628c1
Author: Kathy Brade <brade at pearlcrescent.com>
Date: Wed May 13 10:45:01 2020 -0400
Bug 34164: Tor Launcher deadlocks during startup (Firefox 77)
Initialize the DNS service as early as possible to avoid a problem
where DNS service initialization is dispatched to the main thread
while that thread is blocked.
---
src/components/tl-process.js | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/src/components/tl-process.js b/src/components/tl-process.js
index 31f6801..e9d7cde 100644
--- a/src/components/tl-process.js
+++ b/src/components/tl-process.js
@@ -100,6 +100,22 @@ TorProcessService.prototype =
if ("profile-after-change" == aTopic)
{
+ // Initialize the DNS service here (as early as possible). This
+ // avoids a deadlock that can occur inside TorProtocolService's
+ // _openAuthenticatedConnection() function. What happens in the
+ // deadlock case is that a Necko socket thread tries to dispatch
+ // initialization of the DNS service to the main thread while the
+ // main thread is blocked in a writeBytes() call inside the
+ // _sendCommand() function. The ultimate solution is to change
+ // our control port socket to use asynchronous I/O.
+ // References:
+ // netwerk/dns/nsDNSService2.cpp nsDNSService::GetSingleton()
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1625151 (the
+ // fix for this bug introduced the deadlock because it changed
+ // DNS service initialization to occur on the main thread).
+ const dns = Cc["@mozilla.org/network/dns-service;1"]
+ .getService(Ci.nsIDNSService);
+
this.mObsSvc.addObserver(this, "quit-application-granted", false);
this.mObsSvc.addObserver(this, kOpenNetworkSettingsTopic, false);
this.mObsSvc.addObserver(this, kUserQuitTopic, false);
More information about the tor-commits
mailing list