From b7482bc7d65800037cb5aabc7835f200af68a2dd Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Thu, 22 Sep 2011 06:24:08 +0000 Subject: [PATCH] Avoid yielding in the middle of a transaction because it could be problematic, and don't let other events run until after first yield. --- chrome/content/zotero/xpcom/itemTreeView.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/chrome/content/zotero/xpcom/itemTreeView.js b/chrome/content/zotero/xpcom/itemTreeView.js index e35904798..195de4ddd 100644 --- a/chrome/content/zotero/xpcom/itemTreeView.js +++ b/chrome/content/zotero/xpcom/itemTreeView.js @@ -74,7 +74,9 @@ Zotero.ItemTreeView.prototype._runCallbacks = function() { Zotero.ItemTreeView.prototype.setTree = function(treebox) { var generator = this._setTreeGenerator(treebox); - Zotero.pumpGenerator(generator); + if(generator.next()) { + Zotero.pumpGenerator(generator); + } } /** @@ -199,6 +201,7 @@ Zotero.ItemTreeView.prototype._setTreeGenerator = function(treebox) } catch(e) { Zotero.logError(e); } + yield false; } /** @@ -254,8 +257,6 @@ Zotero.ItemTreeView.prototype._refreshGenerator = function() Zotero.Items.cacheFields(cacheFields); Zotero.ItemTreeView._haveCachedFields = true; - if(this._waitAfter && Date.now() > this._waitAfter) yield true; - var newRows = this._itemGroup.getItems(); var added = 0; @@ -278,8 +279,6 @@ Zotero.ItemTreeView.prototype._refreshGenerator = function() added++; } this._searchItemIDs[newRows[i].id] = true; - - if(i % 100 === 0 && this._waitAfter && Date.now() > this._waitAfter) yield true; } // Add parents of matches if not matches themselves @@ -292,6 +291,8 @@ Zotero.ItemTreeView.prototype._refreshGenerator = function() } Zotero.DB.commitTransaction(); + + if(this._waitAfter && Date.now() > this._waitAfter) yield true; this._refreshHashMap();