commit e4c902b03302f99ce69c3f148573aa89122d169f Author: Georg Koppen gk@torproject.org Date: Fri Jun 27 15:56:43 2014 +0000
Bug 9535: Fix hang on New Identity.
The related bug 10804 needs a different fix as this one applied there would stall the start-up for a short amount of time resulting in a bad user experience. --- src/chrome/content/torbutton.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js index f682f05..4cd9c3d 100644 --- a/src/chrome/content/torbutton.js +++ b/src/chrome/content/torbutton.js @@ -1634,7 +1634,7 @@ function torbutton_do_new_identity() { }
torbutton_log(3, "New Identity: Clearing LocalStorage"); - + try { Components.utils.import("resource:///modules/offlineAppCache.jsm"); OfflineAppCacheHelper.clear(); @@ -1700,6 +1700,18 @@ function torbutton_do_new_identity() { getService(Ci.nsIPermissionManager); pm.removeAll();
+ // We spin the event queue until it is empty and we can be sure that sending + // NEWNYM is not leading to a deadlock (see bug 9531 comment 23 for an + // invstigation on why and when this may happen). This is surrounded by + // suppressing/unsuppressing user initiated events in a window's document to + // be sure that these events are not interfering with processing events being + // in the event queue. + var thread = Cc["@mozilla.org/thread-manager;1"]. + getService(Ci.nsIThreadManager).currentThread; + m_tb_domWindowUtils.suppressEventHandling(true); + while (thread.processNextEvent(false)) {} + m_tb_domWindowUtils.suppressEventHandling(false); + torbutton_log(3, "New Identity: Sending NEWNYM");
// We only support TBB for newnym.