Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullPointerException in HttpReceiverOverHTTP during WebSocket client Upgrade #5170

Closed
lachlan-roberts opened this issue Aug 19, 2020 · 5 comments · Fixed by #5213
Closed
Assignees

Comments

@lachlan-roberts
Copy link
Contributor

Jetty version
10.0.x

Description

Had this exception come up a few times in different websocket tests. This stack trace is from WebSocketStatsTest.
This seems to occur very infrequently, have to run the test many times for this to have a chance of happening.

java.util.concurrent.ExecutionException: java.lang.NullPointerException
	at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
	at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2022)
	at org.eclipse.jetty.websocket.tests.WebSocketStatsTest.echoStatsTest(WebSocketStatsTest.java:127)
        ...
Caused by: java.lang.NullPointerException
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.onUpgradeFrom(HttpReceiverOverHTTP.java:134)
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onUpgradeFrom(HttpConnectionOverHTTP.java:202)
	at org.eclipse.jetty.io.AbstractEndPoint.upgrade(AbstractEndPoint.java:439)
	at org.eclipse.jetty.websocket.core.client.CoreClientUpgradeRequest.upgrade(CoreClientUpgradeRequest.java:446)
	at org.eclipse.jetty.websocket.client.impl.JettyClientUpgradeRequest.upgrade(JettyClientUpgradeRequest.java:69)
	at org.eclipse.jetty.websocket.core.client.HttpUpgraderOverHTTP.upgrade(HttpUpgraderOverHTTP.java:96)
	at org.eclipse.jetty.client.UpgradeProtocolHandler$1.onComplete(UpgradeProtocolHandler.java:86)
	at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218)
	at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210)
	at org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:316)
	at org.eclipse.jetty.client.HttpSender.someToSuccess(HttpSender.java:212)
	at org.eclipse.jetty.client.HttpSender$ContentConsumer.succeeded(HttpSender.java:520)
	at org.eclipse.jetty.client.http.HttpSenderOverHTTP$HeadersCallback.onCompleteSuccess(HttpSenderOverHTTP.java:259)
	at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:315)
	at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:219)
	at org.eclipse.jetty.client.http.HttpSenderOverHTTP.sendHeaders(HttpSenderOverHTTP.java:84)
	at org.eclipse.jetty.client.HttpSender$ContentConsumer.onContent(HttpSender.java:482)
	at org.eclipse.jetty.client.util.AbstractRequestContent$AbstractSubscription.notifyContent(AbstractRequestContent.java:212)
	at org.eclipse.jetty.client.util.AbstractRequestContent$AbstractSubscription.processContent(AbstractRequestContent.java:186)
	at org.eclipse.jetty.client.util.BytesRequestContent$SubscriptionImpl.produceContent(BytesRequestContent.java:88)
	at org.eclipse.jetty.client.util.AbstractRequestContent$AbstractSubscription.produce(AbstractRequestContent.java:122)
	at org.eclipse.jetty.client.util.AbstractRequestContent$AbstractSubscription.demand(AbstractRequestContent.java:98)
	at org.eclipse.jetty.client.HttpSender.demand(HttpSender.java:241)
	at org.eclipse.jetty.client.HttpSender.send(HttpSender.java:87)
	at org.eclipse.jetty.client.http.HttpChannelOverHTTP.send(HttpChannelOverHTTP.java:84)
	at org.eclipse.jetty.client.HttpChannel.send(HttpChannel.java:130)
	at org.eclipse.jetty.client.HttpConnection.send(HttpConnection.java:107)
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP$Delegate.send(HttpConnectionOverHTTP.java:288)
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.send(HttpConnectionOverHTTP.java:148)
	at org.eclipse.jetty.client.HttpDestination.send(HttpDestination.java:392)
	at org.eclipse.jetty.client.HttpDestination.process(HttpDestination.java:368)
	at org.eclipse.jetty.client.HttpDestination.process(HttpDestination.java:322)
	at org.eclipse.jetty.client.HttpDestination.send(HttpDestination.java:308)
	at org.eclipse.jetty.client.HttpDestination.succeeded(HttpDestination.java:237)
	at org.eclipse.jetty.client.AbstractConnectionPool.proceed(AbstractConnectionPool.java:234)
	at org.eclipse.jetty.client.AbstractConnectionPool$1.succeeded(AbstractConnectionPool.java:197)
	at org.eclipse.jetty.client.AbstractConnectionPool$1.succeeded(AbstractConnectionPool.java:181)
	at org.eclipse.jetty.util.Promise$Wrapper.succeeded(Promise.java:157)
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onOpen(HttpConnectionOverHTTP.java:156)
	at org.eclipse.jetty.io.SelectorManager.connectionOpened(SelectorManager.java:312)
	at org.eclipse.jetty.io.ClientConnector$ClientSelectorManager.connectionOpened(ClientConnector.java:342)
	at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:371)
	at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:1030)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:823)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:945)
	at java.base/java.lang.Thread.run(Thread.java:834)
@joakime
Copy link
Contributor

joakime commented Aug 19, 2020

This is probably due to Issue #4971 and we likely missed a step on the websocket side related to that change.

@lachlan-roberts
Copy link
Contributor Author

I managed to reproduce this with some logging enabled.

Looks like the HttpReceiverOverHTTP read 0 bytes so released the network buffer, then after that another thread gets to the websocket upgrade in HttpReceiverOverHTTP.onUpgradeFrom() and there is a null network buffer because it was already released.

2020-08-20 15:52:21.836:DEBUG:oejwusi.WebSocketMapping:qtp78486866-559: WebSocket Negotiated detected on / for endpoint Negotiator@2b588e35{org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer$$Lambda$368/0x0000000100267440@259f752e,JettyServerFrameHandlerFactory@6982cb46{STARTED},org.eclipse.jetty.websocket.core.Configuration$ConfigurationCustomizer@21a0e545}
2020-08-20 15:52:21.836:DEBUG:oejwcsi.AbstractHandshaker:qtp78486866-559: negotiation RFC6455Negotiation@64a27f15{uri=/,oe=null,op=null}
2020-08-20 15:52:21.837:DEBUG:oejwci.ExtensionStack:qtp78486866-559: Extension Configs=[]
2020-08-20 15:52:21.837:DEBUG:oejwcsi.AbstractHandshaker:qtp78486866-559: session WSCoreSession@b646c92{SERVER,WebSocketSessionState@550c5ed5{CONNECTING,i=NO-OP,o=NO-OP,c=null},[ws://localhost:46143/,null,false.[]],af=false,i/o=4096/4096,fs=65536}->JettyWebSocketFrameHandler@732013fc[org.eclipse.jetty.websocket.tests.EchoSocket]
2020-08-20 15:52:21.837:DEBUG:oejwcsi.AbstractHandshaker:qtp78486866-559: connection WebSocketConnection@48d805a::SocketChannelEndPoint@189e9863{l=/127.0.0.1:46143,r=/127.0.0.1:46978,OPEN,fill=-,flush=-,to=0/30000}{io=0/0,kio=0,kro=1}->HttpConnection@2ca57ca5[p=HttpParser{s=CONTENT,0 of -1},g=HttpGenerator@1b687512{s=START}]=>HttpChannelOverHttp@68243a70{s=HttpChannelState@c3f87e{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://localhost:46143/,age=1}
2020-08-20 15:52:21.837:DEBUG:oejwcsi.AbstractHandshaker:qtp78486866-559: upgrade connection=WebSocketConnection@48d805a::SocketChannelEndPoint@189e9863{l=/127.0.0.1:46143,r=/127.0.0.1:46978,OPEN,fill=-,flush=-,to=0/30000}{io=0/0,kio=0,kro=1}->HttpConnection@2ca57ca5[p=HttpParser{s=CONTENT,0 of -1},g=HttpGenerator@1b687512{s=COMMITTED}]=>HttpChannelOverHttp@68243a70{s=HttpChannelState@c3f87e{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://localhost:46143/,age=1} session=WSCoreSession@b646c92{SERVER,WebSocketSessionState@550c5ed5{CONNECTING,i=NO-OP,o=NO-OP,c=null},[ws://localhost:46143/,null,false.[]],af=false,i/o=4096/4096,fs=65536}->JettyWebSocketFrameHandler@732013fc[org.eclipse.jetty.websocket.tests.EchoSocket] framehandler=JettyWebSocketFrameHandler@732013fc[org.eclipse.jetty.websocket.tests.EchoSocket]
2020-08-20 15:52:21.837:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Acquired RetainableByteBuffer@76d4467f{DirectByteBuffer@7813a6d5[p=0,l=0,c=16384,r=0]={<<<>>>\x00\x00\x00\x00\x00\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00},r=1}
2020-08-20 15:52:21.837:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Parse result=false, failed=false
2020-08-20 15:52:21.837:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Parse complete=false, remaining 0 HttpParser{s=START,0 of -1}
2020-08-20 15:52:21.837:DEBUG:oejwci.WebSocketConnection:qtp78486866-559: onOpen() WebSocketConnection@48d805a::SocketChannelEndPoint@189e9863{l=/127.0.0.1:46143,r=/127.0.0.1:46978,OPEN,fill=-,flush=-,to=0/30000}{io=0/0,kio=0,kro=1}->WebSocketConnection@48d805a[SERVER,p=Parser@784fc97[s=START,c=0,o=0x0,m=-,l=0],f=org.eclipse.jetty.websocket.core.internal.WebSocketConnection$Flusher@5f1cc990[IDLE][queueSize=0,aggregate=null],g=org.eclipse.jetty.websocket.core.internal.Generator@16229fb9]
2020-08-20 15:52:21.837:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Read 198 bytes in RetainableByteBuffer@76d4467f{DirectByteBuffer@7813a6d5[p=0,l=198,c=16384,r=198]={<<<HTTP/1.1 101 Switching Pr...ty(10.0.0-SNAPSHOT)\r\n\r\n>>>\x00\x00\x00\x00\x00\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00},r=1} from SocketChannelEndPoint@3325d0d0{l=/127.0.0.1:46978,r=localhost/127.0.0.1:46143,OPEN,fill=-,flush=-,to=0/30000}{io=0/0,kio=0,kro=1}->HttpConnectionOverHTTP@3de2391c(l:/127.0.0.1:46978 <-> r:localhost/127.0.0.1:46143,closed=false)=>HttpChannelOverHTTP@371a526c(exchange=HttpExchange@123725a4 req=PENDING/null@null res=PENDING/null@null)[send=HttpSenderOverHTTP@7218daeb(req=TRANSIENT,failure=null)[HttpGenerator@5e9e276d{s=END}],recv=HttpReceiverOverHTTP@4320cf3e(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
2020-08-20 15:52:21.837:DEBUG:oejwci.WebSocketCoreSession:qtp78486866-559: onOpen() WSCoreSession@b646c92{SERVER,WebSocketSessionState@550c5ed5{CONNECTING,i=NO-OP,o=NO-OP,c=null},[ws://localhost:46143/,null,false.[]],af=false,i/o=4096/4096,fs=65536}->JettyWebSocketFrameHandler@732013fc[org.eclipse.jetty.websocket.tests.EchoSocket]
2020-08-20 15:52:21.837:DEBUG:oejwci.WebSocketCoreSession:qtp78486866-559: ConnectionState: Transition to CONNECTED
2020-08-20 15:52:21.837:DEBUG:oejc.HttpReceiver:WebSocketClient@659277134-568: Found protocol handler org.eclipse.jetty.client.UpgradeProtocolHandler@7c2c2d0f
2020-08-20 15:52:21.837:DEBUG:oejc.HttpConversation:WebSocketClient@659277134-568: Exchanges in conversation 1, override=org.eclipse.jetty.client.UpgradeProtocolHandler$1@392eacee, listeners=[org.eclipse.jetty.client.UpgradeProtocolHandler$1@392eacee]
2020-08-20 15:52:21.837:DEBUG:oejc.HttpReceiver:WebSocketClient@659277134-568: Response begin HttpResponse[HTTP/1.1 101 Switching Protocols]@6d9df20a
2020-08-20 15:52:21.837:DEBUG:oejwt.EventSocket:qtp78486866-559: [SERVER@9bd950b]  onOpen(): WebSocketSession[SERVER,to=PT30S,WSCoreSession@b646c92{SERVER,WebSocketSessionState@550c5ed5{CONNECTED,i=NO-OP,o=NO-OP,c=null},[ws://localhost:46143/,null,false.[]],af=false,i/o=4096/4096,fs=65536}->JettyWebSocketFrameHandler@732013fc[org.eclipse.jetty.websocket.tests.EchoSocket],JettyWebSocketFrameHandler@732013fc[org.eclipse.jetty.websocket.tests.EchoSocket]]
2020-08-20 15:52:21.837:DEBUG:oejwci.WebSocketCoreSession:qtp78486866-559: ConnectionState: Transition to OPEN
2020-08-20 15:52:21.837:DEBUG:oejc.HttpReceiver:WebSocketClient@659277134-568: Response headers HttpResponse[HTTP/1.1 101 Switching Protocols]@6d9df20a|Date: Thu, 20 Aug 2020 05:52:21 GMT<|Upgrade: WebSocket<|Connection: Upgrade<|Sec-WebSocket-Accept: +OP7Yh1cEucZ/YDN/4FlrnJCldo=<|Server: Jetty(10.0.0-SNAPSHOT)
2020-08-20 15:52:21.837:DEBUG:oejwci.WebSocketConnection:qtp78486866-559: demand 1 d=0 fp=false null WebSocketConnection@48d805a::SocketChannelEndPoint@189e9863{l=/127.0.0.1:46143,r=/127.0.0.1:46978,OPEN,fill=-,flush=-,to=0/30000}{io=0/0,kio=0,kro=1}->WebSocketConnection@48d805a[SERVER,p=Parser@784fc97[s=START,c=0,o=0x0,m=-,l=0],f=org.eclipse.jetty.websocket.core.internal.WebSocketConnection$Flusher@5f1cc990[IDLE][queueSize=0,aggregate=null],g=org.eclipse.jetty.websocket.core.internal.Generator@16229fb9]
2020-08-20 15:52:21.838:DEBUG:oejc.HttpReceiver:WebSocketClient@659277134-568: Response demand=1/1, resume=false
2020-08-20 15:52:21.838:DEBUG:oejc.HttpReceiver:WebSocketClient@659277134-568: Response headers HttpResponse[HTTP/1.1 101 Switching Protocols]@6d9df20a, hasDemand=true
2020-08-20 15:52:21.838:DEBUG:oejc.HttpReceiver:WebSocketClient@659277134-568: Response success HttpResponse[HTTP/1.1 101 Switching Protocols]@6d9df20a
2020-08-20 15:52:21.838:DEBUG:oejc.HttpSender:WebSocketClient@659277134-566: Request committed JettyClientUpgradeRequest[GET / HTTP/1.1]@4ed2dced
2020-08-20 15:52:21.838:DEBUG:oejc.HttpExchange:WebSocketClient@659277134-568: Terminated response for HttpExchange@123725a4 req=PENDING/null@null res=TERMINATED/null@null, result: null
2020-08-20 15:52:21.838:DEBUG:oejwci.WebSocketConnection:qtp78486866-560: run()
2020-08-20 15:52:21.838:DEBUG:oejc.HttpReceiver:WebSocketClient@659277134-568: Response complete HttpResponse[HTTP/1.1 101 Switching Protocols]@6d9df20a, result: null
2020-08-20 15:52:21.838:DEBUG:oejc.HttpSender:WebSocketClient@659277134-566: Request success JettyClientUpgradeRequest[GET / HTTP/1.1]@4ed2dced
2020-08-20 15:52:21.838:DEBUG:oejwci.WebSocketConnection:qtp78486866-560: endpointFill() filled=0: RetainableByteBuffer@796d43fd{DirectByteBuffer@77aaa2a0[p=0,l=0,c=4096,r=0]={<<<>>>\x00\x00\x00\x00\x00\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00},r=1}
2020-08-20 15:52:21.838:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Parse result=false, failed=false
2020-08-20 15:52:21.838:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Parse complete=true, remaining 0 HttpParser{s=START,0 of -1}
2020-08-20 15:52:21.838:DEBUG:oejc.HttpExchange:WebSocketClient@659277134-566: Terminated request for HttpExchange@123725a4 req=TERMINATED/null@null res=TERMINATED/null@null, result: Result[JettyClientUpgradeRequest[GET / HTTP/1.1]@4ed2dced > HttpResponse[HTTP/1.1 101 Switching Protocols]@6d9df20a] null
2020-08-20 15:52:21.838:DEBUG:oejc.HttpSender:WebSocketClient@659277134-566: Terminating request JettyClientUpgradeRequest[GET / HTTP/1.1]@4ed2dced
2020-08-20 15:52:21.838:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Read 0 bytes in RetainableByteBuffer@76d4467f{DirectByteBuffer@7813a6d5[p=0,l=0,c=16384,r=0]={<<<>>>HTTP/1.1 ...\x00\x00\x00\x00\x00\x00\x00},r=1} from SocketChannelEndPoint@3325d0d0{l=/127.0.0.1:46978,r=localhost/127.0.0.1:46143,OPEN,fill=-,flush=-,to=0/30000}{io=0/0,kio=0,kro=1}->HttpConnectionOverHTTP@3de2391c(l:/127.0.0.1:46978 <-> r:localhost/127.0.0.1:46143,closed=false)=>HttpChannelOverHTTP@371a526c(exchange=HttpExchange@123725a4 req=TERMINATED/null@null res=TERMINATED/null@null)[send=HttpSenderOverHTTP@7218daeb(req=QUEUED,failure=null)[HttpGenerator@5e9e276d{s=START}],recv=HttpReceiverOverHTTP@4320cf3e(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
2020-08-20 15:52:21.838:DEBUG:oejch.HttpReceiverOverHTTP:WebSocketClient@659277134-568: Released RetainableByteBuffer@76d4467f{DirectByteBuffer@7813a6d5[p=0,l=0,c=16384,r=0]={<<<>>>HTTP/1.1 ...\x00\x00\x00\x00\x00\x00\x00},r=0}
2020-08-20 15:52:21.838:DEBUG:oejc.HttpChannel:WebSocketClient@659277134-566: HttpExchange@123725a4 req=TERMINATED/null@null res=TERMINATED/null@null disassociated true from HttpChannelOverHTTP@371a526c(exchange=null)[send=HttpSenderOverHTTP@7218daeb(req=QUEUED,failure=null)[HttpGenerator@5e9e276d{s=START}],recv=HttpReceiverOverHTTP@4320cf3e(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
2020-08-20 15:52:21.838:DEBUG:oejc.AbstractConnectionPool:WebSocketClient@659277134-566: Removed (true) Entry@264c6c04{usage=-1,multiplex=0,pooled=HttpConnectionOverHTTP@3de2391c::SocketChannelEndPoint@3325d0d0{l=/127.0.0.1:46978,r=localhost/127.0.0.1:46143,OPEN,fill=FI,flush=-,to=0/30000}{io=1/1,kio=1,kro=1}->HttpConnectionOverHTTP@3de2391c(l:/127.0.0.1:46978 <-> r:localhost/127.0.0.1:46143,closed=false)=>HttpChannelOverHTTP@371a526c(exchange=null)[send=HttpSenderOverHTTP@7218daeb(req=QUEUED,failure=null)[HttpGenerator@5e9e276d{s=START}],recv=HttpReceiverOverHTTP@4320cf3e(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]}
2020-08-20 15:52:21.838:DEBUG:oejc.HttpSender:WebSocketClient@659277134-566: Request/Response succeeded: Result[JettyClientUpgradeRequest[GET / HTTP/1.1]@4ed2dced > HttpResponse[HTTP/1.1 101 Switching Protocols]@6d9df20a] null
2020-08-20 15:52:21.838:DEBUG:oejwci.ExtensionStack:WebSocketClient@659277134-566: Extension Configs=[]
2020-08-20 15:52:21.838:DEBUG:oejc.HttpExchange:WebSocketClient@659277134-566: Failed HttpExchange@123725a4 req=TERMINATED/null@null res=TERMINATED/null@null: req=false/rsp=false {}
java.lang.NullPointerException
	at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.onUpgradeFrom(HttpReceiverOverHTTP.java:134)
	at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onUpgradeFrom(HttpConnectionOverHTTP.java:202)
	at org.eclipse.jetty.io.AbstractEndPoint.upgrade(AbstractEndPoint.java:439)
	at org.eclipse.jetty.websocket.core.client.CoreClientUpgradeRequest.upgrade(CoreClientUpgradeRequest.java:446)
	at org.eclipse.jetty.websocket.client.impl.JettyClientUpgradeRequest.upgrade(JettyClientUpgradeRequest.java:69)

@sbordet
Copy link
Contributor

sbordet commented Aug 27, 2020

@lachlan-roberts this is a classic case where the HTTP response finishes before the HTTP request.

When the response completes, it nulls out HttpReceiverOverHTTP.networkBuffer, but it is only when the request also completes that HttpReceiverOverHTTP.onUpgradeFrom() is called (from the sender thread).

The simple fix is to add a null guard in onUpgradeFrom().

@lachlan-roberts lachlan-roberts self-assigned this Aug 31, 2020
lachlan-roberts added a commit that referenced this issue Aug 31, 2020
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
lachlan-roberts added a commit that referenced this issue Sep 2, 2020
…ffer

Issue #5170 - fix NPE during websocket upgrade
lachlan-roberts added a commit that referenced this issue Sep 14, 2020
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
lachlan-roberts added a commit that referenced this issue Sep 16, 2020
Issue #5170 - fix upgrade bug in HttpReceiverOverHTTP
@lachlan-roberts
Copy link
Contributor Author

Reopening to verify that this issue does not exist in 9.4.x as well.

@lachlan-roberts lachlan-roberts added this to To do in Jetty 9.4.32 via automation Sep 22, 2020
lachlan-roberts added a commit that referenced this issue Sep 22, 2020
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
lachlan-roberts added a commit that referenced this issue Sep 22, 2020
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
@joakime joakime moved this from To do to In progress in Jetty 9.4.32 Sep 23, 2020
lachlan-roberts added a commit that referenced this issue Sep 25, 2020
Issue #5170 - backport fixes for WebSocket upgrade to jetty-9.4.x
@lachlan-roberts
Copy link
Contributor Author

Fixed in 9.4.x.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
No open projects
Jetty 9.4.32
  
Done
Development

Successfully merging a pull request may close this issue.

4 participants