src/java.net.http/share/classes/jdk/internal/net/http/websocket/TransportImpl.java
branchhttp-client-branch
changeset 56326 63422db47911
parent 56314 f92e7a8a189f
child 56389 0ba90c4f1e3f
--- a/src/java.net.http/share/classes/jdk/internal/net/http/websocket/TransportImpl.java	Tue Mar 20 10:19:00 2018 +0000
+++ b/src/java.net.http/share/classes/jdk/internal/net/http/websocket/TransportImpl.java	Tue Mar 20 13:10:09 2018 +0000
@@ -594,6 +594,7 @@
             debug.log(Level.DEBUG, "enter receive task");
             loop:
             while (!receiveScheduler.isStopped()) {
+                ChannelState rs = readState;
                 if (data.hasRemaining()) {
                     debug.log(Level.DEBUG, "remaining bytes received %s",
                               data.remaining());
@@ -608,18 +609,20 @@
                             receiveScheduler.stop();
                             messageConsumer.onError(e);
                         }
+                        if (!data.hasRemaining()) {
+                            rs = readState = UNREGISTERED;
+                        }
                         continue;
                     }
                     break loop;
                 }
-                final ChannelState rs = readState;
                 debug.log(Level.DEBUG, "receive state: %s", rs);
                 switch (rs) {
                     case WAITING:
                         break loop;
                     case UNREGISTERED:
                         try {
-                            readState = WAITING;
+                            rs = readState = WAITING;
                             channel.registerEvent(readEvent);
                         } catch (Throwable e) {
                             receiveScheduler.stop();
@@ -641,7 +644,7 @@
                         } else if (!data.hasRemaining()) {
                             // No data at the moment. Pretty much a "goto",
                             // reusing the existing code path for registration
-                            readState = UNREGISTERED;
+                            rs = readState = UNREGISTERED;
                         }
                         continue loop;
                     default: