https://issues.apache.org/bugzilla/show_bug.cgi?id=54721

            Bug ID: 54721
           Summary: RemoteEndpoint blocks indefinitely if sendObject
                    called with BinaryStream of TextStream encoders
           Product: Tomcat 8
           Version: trunk
          Hardware: All
                OS: All
            Status: NEW
          Severity: critical
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: nicho...@nicholaswilliams.net
    Classification: Unclassified

Created attachment 30076
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=30076&action=edit
Patch to resolve issue

If I specify a j.w.Encoder.BinaryStream<T> or j.w.Encoder.TextStream<T> as the
encoder for my endpoint, sendObject() never completes. This is because (A)
sendObjectByCompletion does not close the OutputStream or Reader (methods that
accept closeable resources as arguments should not close those resources; the
calling method should) AND (B) onResult is never called on the SendHandler in
sendObjectByCompletion for these two cases. Patch attached. Thread dump below.

"http-nio-8080-exec-10@4030" daemon prio=5 tid=0x38 nid=NA waiting
  java.lang.Thread.State: WAITING
      at sun.misc.Unsafe.park(Unsafe.java:-1)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:995)
      at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1302)
      at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
      at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase$FutureToSendHandler.get(WsRemoteEndpointImplBase.java:703)
      at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase$FutureToSendHandler.get(WsRemoteEndpointImplBase.java:666)
      at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendObject(WsRemoteEndpointImplBase.java:406)
      at
org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendObject(WsRemoteEndpointBasic.java:74)
      at com.wrox.chat.ChatEndpoint.onOpen(ChatEndpoint.java:92)
      at
sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
      at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:487)
      at
org.apache.tomcat.websocket.pojo.PojoEndpointBase.doOnOpen(PojoEndpointBase.java:51)
      at
org.apache.tomcat.websocket.pojo.PojoEndpointServer.onOpen(PojoEndpointServer.java:69)
      at
org.apache.tomcat.websocket.server.WsProtocolHandler.init(WsProtocolHandler.java:109)
      at
org.apache.coyote.http11.upgrade.AbstractProcessor.<init>(AbstractProcessor.java:51)
      at
org.apache.coyote.http11.upgrade.NioProcessor.<init>(NioProcessor.java:31)
      at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.createUpgradeProcessor(Http11NioProtocol.java:309)
      at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:634)
      at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
      at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1581)
      at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1540)
      - locked <0x13a6> (a org.apache.tomcat.util.net.NioChannel)
      at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
      at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
      at java.lang.Thread.run(Thread.java:722)

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to