Hmm, looks like I actually fixed the StreamSourceChannel, and the same
bug exists in the StreamSinkChannel.
For now I have moved these into undertow and fixed the problem, and
added some tests. I have also removed the volatile writes that attempted
to provide some level of protection against multi-threaded channel
access. The handler contract does not allow for concurrent channel
access, and the volatile writes just slow things down.
Stuart
Matej Lazar wrote:
I updatetd to XNIO 3.1.0.Beta7 and latest Undertow master.
I still have an exception
Dec 11, 2012 7:02:02 PM io.undertow.util.WorkerDispatcher$1 run
ERROR: UNDERTOW005001: An exception occurred processing the request
org.xnio.channels.FixedLengthUnderflowException: 65536 bytes remaining
at
org.xnio.channels.FixedLengthStreamSinkChannel.shutdownWrites(FixedLengthStreamSinkChannel.java:291)
at ceylon.net.httpd.internal.HttpResponseImpl.responseDone(HttpResponseImpl.ceylon:69)
at
ceylon.net.httpd.internal.CeylonRequestHandler$AsyncInvoker$1completionHandler_.handleComplete(CeylonRequestHandler.ceylon:65)
at ceylon.net.httpd.endpoints.StaticFileEndpoint.service(StaticFileEndpoint.ceylon:69)
at
ceylon.net.httpd.internal.CeylonRequestHandler$AsyncInvoker.run(CeylonRequestHandler.ceylon:69)
at io.undertow.util.WorkerDispatcher$1.run(WorkerDispatcher.java:53)
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)
Matej.
On 23/10/12 00:49, Stuart Douglas wrote:
> This should be fixed in the XNIO upstream:
>
>
https://github.com/xnio/xnio/commit/5a1ed9dff29455d78bc9beb50c6e448e1bbb6ef9
>
> David, would we be able to get another XNIO release soonish?
>
> Stuart
>
> Matej Lazar wrote:
>> Hi, I'm writing an http server for Ceylon on top of undertow.
>>
>> All bytes are written to response and successfully transferred, but exception
bellow occurs when shutdownWrites is called.
>>
>> Stepping through a "write" method of FixedLengthStreamSinkChannel,
looks like "state" is not updated correctly, it is always subtracted only for
are number of bytes written in one loop.
>>
>> Am I missing something or is it a bug ?
>>
>> byte array size is 6919638, usually there are 147456 bytes written to a response
in a loop
>>
>> My code for writing bytes to response ... not quite Java, but readable ;)
>>
>> shared actual void writeBytes(Array<Integer> bytes) {
>> //ByteBuffer.wrap
>> value bb = wrapByteBuffer(bytes);
>> value response = getResponse();
>>
>> variable Integer remaining := bytes.size;
>> while (remaining> 0) {
>> variable Integer written := 0;
>> while((written := response.write(bb))> 0) {
>> remaining -= written;
>> try {
>> response.awaitWritable();
>> } catch(JIOException e) {
>> //TODO
>> print(e);
>> }
>> }
>> }
>> }
>>
>>
>> Exception in thread "XNIO-1 task-2" java.lang.Error:
org.xnio.channels.FixedLengthUnderflowException: 6815744 bytes remaining
>> at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1116)
>> at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>> at java.lang.Thread.run(Thread.java:722)
>> Caused by: org.xnio.channels.FixedLengthUnderflowException: 6815744 bytes
remaining
>> at
org.xnio.channels.FixedLengthStreamSinkChannel.shutdownWrites(FixedLengthStreamSinkChannel.java:291)
>> at
ceylon.net.httpd.internal.HttpResponseImpl.responseDone(HttpResponseImpl.ceylon:71)
>> at
ceylon.net.httpd.internal.CeylonRequestHandler$AsyncInvoker$1completionHandler_.handleComplete(CeylonRequestHandler.ceylon:56)
>> at
ceylon.net.httpd.endpoints.StaticFileEndpoint.service(StaticFileEndpoint.ceylon:50)
>> at
ceylon.net.httpd.internal.CeylonRequestHandler$AsyncInvoker.run(CeylonRequestHandler.ceylon:60)
>> at io.undertow.util.WorkerDispatcher$1.run(WorkerDispatcher.java:49)
>> at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>> ... 2 more
>>
>>
>> Thanks,
>> Matej.
>> _______________________________________________
>> undertow-dev mailing list
>> undertow-dev(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/undertow-dev