Remove the intentState.receivingOperatorList boolean since it's redundant

The `receivingOperatorList` property is currently tracked *twice* in the rendering code, both directly and inversely through the `intentState.operatorList.lastChunk` boolean. This type of double bookkeeping is never a good idea, since it's just too easy for the properties to accidentally fall out of sync.

In this case there's even a `cleanup`-related bug caused by this, which means that `PDFPageProxy._tryCleanup` will never be able to discard any data if there's an error on the worker-thread (as handled through the 'PageError' message).

Hence the simplest solution seems, at least to me, to update `PDFPageProxy._tryCleanup` to replace the `intentState.receivingOperatorList` check with a `!intentState.operatorList.lastChunk` check and completely remove the former property.
This commit is contained in:
Jonas Jenwald 2019-07-10 13:24:21 +02:00
parent d7afb74a6e
commit c6fcdf474b

View File

@ -1023,7 +1023,6 @@ class PDFPageProxy {
// If there's no displayReadyCapability yet, then the operatorList // If there's no displayReadyCapability yet, then the operatorList
// was never requested before. Make the request and create the promise. // was never requested before. Make the request and create the promise.
if (!intentState.displayReadyCapability) { if (!intentState.displayReadyCapability) {
intentState.receivingOperatorList = true;
intentState.displayReadyCapability = createPromiseCapability(); intentState.displayReadyCapability = createPromiseCapability();
intentState.operatorList = { intentState.operatorList = {
fnArray: [], fnArray: [],
@ -1125,7 +1124,6 @@ class PDFPageProxy {
if (!intentState.opListReadCapability) { if (!intentState.opListReadCapability) {
opListTask = {}; opListTask = {};
opListTask.operatorListChanged = operatorListChanged; opListTask.operatorListChanged = operatorListChanged;
intentState.receivingOperatorList = true;
intentState.opListReadCapability = createPromiseCapability(); intentState.opListReadCapability = createPromiseCapability();
intentState.renderTasks = []; intentState.renderTasks = [];
intentState.renderTasks.push(opListTask); intentState.renderTasks.push(opListTask);
@ -1241,7 +1239,7 @@ class PDFPageProxy {
Object.keys(this.intentStates).some(function(intent) { Object.keys(this.intentStates).some(function(intent) {
const intentState = this.intentStates[intent]; const intentState = this.intentStates[intent];
return (intentState.renderTasks.length !== 0 || return (intentState.renderTasks.length !== 0 ||
intentState.receivingOperatorList); !intentState.operatorList.lastChunk);
}, this)) { }, this)) {
return; return;
} }
@ -1290,7 +1288,6 @@ class PDFPageProxy {
} }
if (operatorListChunk.lastChunk) { if (operatorListChunk.lastChunk) {
intentState.receivingOperatorList = false;
this._tryCleanup(); this._tryCleanup();
} }
} }