From f47babfd0bad7b4bff2abdeea68169fe2f02ed22 Mon Sep 17 00:00:00 2001 From: Varun Sharma Date: Tue, 19 Feb 2019 20:28:27 +0530 Subject: [PATCH] WIP: BugFix #636 Pause and resume (In a quick succession) gets you lot of exceptions and an infinite loop --- papaparse.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/papaparse.js b/papaparse.js index 70c4edc..efe082b 100755 --- a/papaparse.js +++ b/papaparse.js @@ -473,6 +473,7 @@ License: MIT this._handle = null; this._finished = false; this._completed = false; + this._halted = false; this._input = null; this._baseIndex = 0; this._partialLine = ''; @@ -497,6 +498,7 @@ License: MIT chunk = modifiedChunk; } this.isFirstChunk = false; + this._halted = false; // Rejoin the line we likely just split in two by chunking the file var aggregate = this._partialLine + chunk; @@ -504,8 +506,10 @@ License: MIT var results = this._handle.parse(aggregate, this._baseIndex, !this._finished); - if (this._handle.paused() || this._handle.aborted()) + if (this._handle.paused() || this._handle.aborted()) { + this._halted = true; return; + } var lastIndex = results.meta.cursor; @@ -531,8 +535,10 @@ License: MIT else if (isFunction(this._config.chunk) && !isFakeChunk) { this._config.chunk(results, this._handle); - if (this._handle.paused() || this._handle.aborted()) + if (this._handle.paused() || this._handle.aborted()) { + this._halted = true; return; + } results = undefined; this._completeResults = undefined; } @@ -554,6 +560,11 @@ License: MIT return results; }; + this.halted = function() + { + return this._halted; + } + this._sendError = function(error) { if (isFunction(this._config.error)) @@ -1089,8 +1100,12 @@ License: MIT this.resume = function() { - _paused = false; - self.streamer.parseChunk(_input, true); + if(self.streamer.halted()) { + _paused = false; + self.streamer.parseChunk(_input, true); + } else { + setTimeout(() => this.resume(), 3); + } }; this.aborted = function()