]> git.parisson.com Git - pdf.js.git/commitdiff
Fixing concurrency and test driver
authorYury Delendik <ydelendik@mozilla.com>
Mon, 16 Apr 2012 19:49:55 +0000 (14:49 -0500)
committerYury Delendik <ydelendik@mozilla.com>
Mon, 16 Apr 2012 19:49:55 +0000 (14:49 -0500)
src/api.js
test/driver.js

index 1bebce28d865e990f355e71cc63aba4cf540f797..1dfafb9eef1cc1f61393c050d687c5e47febc87e 100644 (file)
@@ -133,6 +133,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
     this.stats = new StatTimer();
     this.stats.enabled = !!globalScope.PDFJS.enableStats;
     this.objs = transport.objs;
+    this.renderRequests = 0;
   }
   PDFPageProxy.prototype = {
     /**
@@ -198,12 +199,14 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
      * rendering.
      */
     render: function(params) {
+      this.renderRequests++;
+
       var promise = new Promise();
       var stats = this.stats;
       stats.time('Overall');
       // If there is no displayReadyPromise yet, then the operatorList was never
       // requested before. Make the request and create the promise.
-      if (!this.displayReadyPromise || this.destroyed) {
+      if (!this.displayReadyPromise) {
         this.displayReadyPromise = new Promise();
         this.destroyed = false;
 
@@ -213,7 +216,14 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
         });
       }
 
+      var self = this;
       function complete(error) {
+        self.renderRequests--;
+        if (self.destroyed && self.renderRequests == 0) {
+          delete self.operatorList;
+          delete self.displayReadyPromise;
+        }
+
         if (error)
           promise.reject(error);
         else
@@ -251,7 +261,6 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
         // Always defer call to display() to work around bug in
         // Firefox error reporting from XHR callbacks.
         setTimeout(function pageSetTimeout() {
-          delete self.operatorList;
           self.displayReadyPromise.resolve();
         });
       };
@@ -340,6 +349,11 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
      */
     destroy: function() {
       this.destroyed = true;
+
+      if (this.renderRequests == 0) {
+        delete self.operatorList;
+        delete self.displayReadyPromise;
+      }
     }
   };
   return PDFPageProxy;
index 26c5a156a35d19d445196b384fa10a216d0ba054..2f17fa43c248aea1c7c575859595b3d9b79a754b 100644 (file)
@@ -195,9 +195,11 @@ function nextPage(task, loadError) {
           viewport: viewport
         };
         page.render(renderContext).then(function() {
+          page.destroy();
           snapshotCurrentPage(task, false);
         },
         function(error) {
+          page.destroy();
           snapshotCurrentPage(task, 'render : ' + error);
         });
       },