Bladeren bron

Prevent server race condition when shutting down

Steven Silvester 8 jaren geleden
bovenliggende
commit
28619e0078
2 gewijzigde bestanden met toevoegingen van 19 en 5 verwijderingen
  1. 5 1
      packages/services/src/kernel/default.ts
  2. 14 4
      packages/services/src/session/default.ts

+ 5 - 1
packages/services/src/kernel/default.ts

@@ -377,7 +377,11 @@ class DefaultKernel implements Kernel.IKernel {
       return Promise.reject(new Error('Kernel is dead'));
     }
     this._clearState();
-    return Private.shutdownKernel(this.id, this._baseUrl, this.ajaxSettings);
+    return this.ready.then(() => {
+      return Private.shutdownKernel(
+        this.id, this._baseUrl, this.ajaxSettings
+      );
+    });
   }
 
   /**

+ 14 - 4
packages/services/src/session/default.ts

@@ -263,11 +263,14 @@ class DefaultSession implements Session.ISession {
     if (this.isDisposed) {
       return Promise.reject(new Error('Session is disposed'));
     }
-    this._kernel.dispose();
     let data = JSON.stringify({ kernel: options });
-    return this._patch(data).then(() => {
-      return this.kernel;
-    });
+    if (this._kernel) {
+      return this._kernel.ready.then(() => {
+        this._kernel.dispose();
+        return this._patch(data);
+      }).then(() => this.kernel);
+    }
+    return this._patch(data).then(() => this.kernel);
   }
 
   /**
@@ -283,6 +286,13 @@ class DefaultSession implements Session.ISession {
     if (this.isDisposed) {
       return Promise.reject(new Error('Session is disposed'));
     }
+    if (this._kernel) {
+      return this._kernel.ready.then(() => {
+        return Private.shutdownSession(
+          this.id, this._baseUrl, this.ajaxSettings
+        );
+      });
+    }
     return Private.shutdownSession(this.id, this._baseUrl, this.ajaxSettings);
   }