| Index: lib/filterStorage.js |
| =================================================================== |
| --- a/lib/filterStorage.js |
| +++ b/lib/filterStorage.js |
| @@ -23,16 +23,17 @@ Cu.import("resource://gre/modules/Servic |
| Cu.import("resource://gre/modules/FileUtils.jsm"); |
| Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
| let {IO} = require("io"); |
| let {Prefs} = require("prefs"); |
| let {Filter, ActiveFilter} = require("filterClasses"); |
| let {Subscription, SpecialSubscription, ExternalSubscription} = require("subscriptionClasses"); |
| let {FilterNotifier} = require("filterNotifier"); |
| +let {Utils} = require("utils"); |
| let {TimeLine} = require("timeline"); |
| /** |
| * Version number of the filter storage file format. |
| * @type Integer |
| */ |
| let formatVersion = 4; |
| @@ -785,19 +786,20 @@ function INIParser() |
| { |
| this.fileProperties = this.curObj = {}; |
| this.subscriptions = []; |
| this.knownFilters = {__proto__: null}; |
| this.knownSubscriptions = {__proto__: null}; |
| } |
| INIParser.prototype = |
| { |
| + linesProcessed: 0, |
| subscriptions: null, |
| knownFilters: null, |
| - knownSubscrptions : null, |
| + knownSubscriptions : null, |
| wantObj: true, |
| fileProperties: null, |
| curObj: null, |
| curSection: null, |
| userFilters: null, |
| process: function(val) |
| { |
| @@ -872,10 +874,16 @@ INIParser.prototype = |
| else if (this.wantObj === false && val) |
| this.curObj.push(val.replace(/\\\[/g, "[")); |
| } |
| finally |
| { |
| Filter.knownFilters = origKnownFilters; |
| Subscription.knownSubscriptions = origKnownSubscriptions; |
| } |
| + |
| + // Allow events to be processed every now and then. |
| + // Note: IO.readFromFile() will deal with the potential reentrance here. |
| + this.linesProcessed++; |
| + if (this.linesProcessed % 1000 == 0) |
| + Utils.yield(); |
| } |
| }; |