src/java.net.http/share/classes/jdk/internal/net/http/Http1AsyncReceiver.java
changeset 50985 cd41f34e548c
parent 50681 4254bed3c09d
child 52499 768b1c612100
child 56833 be0819373531
--- a/src/java.net.http/share/classes/jdk/internal/net/http/Http1AsyncReceiver.java	Wed Jul 04 16:54:56 2018 +0200
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/Http1AsyncReceiver.java	Wed Jul 04 16:16:24 2018 +0100
@@ -386,8 +386,11 @@
             // we have a flow List<ByteBuffer> upstream.
             Http1AsyncDelegateSubscription subscription =
                     new Http1AsyncDelegateSubscription(scheduler, cancel, onSubscriptionError);
-            pending.onSubscribe(subscription);
-            this.delegate = delegate = pending;
+            try {
+                pending.onSubscribe(subscription);
+            } finally {
+                this.delegate = delegate = pending;
+            }
             final Object captured = delegate;
             if (debug.on())
                 debug.log("delegate is now " + captured
@@ -485,10 +488,11 @@
                 error = ex;
             }
         }
-            final Throwable t = (recorded == null ? ex : recorded);
-            if (debug.on())
-                debug.log("recorded " + t + "\n\t delegate: " + delegate
-                          + "\t\t queue.isEmpty: " + queue.isEmpty(), ex);
+
+        final Throwable t = (recorded == null ? ex : recorded);
+        if (debug.on())
+            debug.log("recorded " + t + "\n\t delegate: " + delegate
+                      + "\t\t queue.isEmpty: " + queue.isEmpty(), ex);
         if (Log.errors()) {
             Log.logError("HTTP/1 read subscriber recorded error: {0} - {1}", describe(), t);
         }