Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Response > Buffer + Continuations = Deadlock?

Sorry for the multiple emails :)

It is a deadlock between the Selector thread, which owns SSLChannelEndpoint and is waiting on AsyncContinuation, and the thread writing to the output stream, which is waiting on SSLChannelEndpoint and owns AsyncContination.

Details below. All help appreciated - even if just to tell me to open a bug report :)

Thanks

Matt

Thread [pool-1-thread-5 Selector0] (Suspended)
owns: SslSelectChannelEndPoint  (id=338)
waiting for: AsyncContinuation  (id=8895)
AsyncContinuation.isSuspended() line: 173
SelectChannelConnector$SelectChannelHttpConnection(HttpConnection).isSuspended() line: 653
SslSelectChannelEndPoint(SelectChannelEndPoint).isReadyForDispatch() line: 316
SslSelectChannelEndPoint(SelectChannelEndPoint).schedule() line: 164
SelectorManager$SelectSet.doSelect() line: 607
SelectorManager$1.run() line: 283
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1110
ThreadPoolExecutor$Worker.run() line: 603
Thread.run() line: 722


Daemon Thread [Thread-111] (Suspended)
owns: AsyncContinuation  (id=8895)
waiting for: SslSelectChannelEndPoint  (id=338)
owned by: Thread [pool-1-thread-5 Selector0] (Suspended)
SslSelectChannelEndPoint(SelectChannelEndPoint).blockWritable(long) line: 371
HttpGenerator(AbstractGenerator).blockForOutput(long) line: 530
HttpConnection$Output(HttpOutput).write(Buffer) line: 154
HttpConnection$Output(HttpOutput).write(byte[], int, int) line: 96
Utf8Generator._flushBuffer() line: 1437
Utf8Generator.writeString(String) line: 465
StdSerializers$StringSerializer.serialize(String, JsonGenerator, SerializerProvider) line: 123
StdSerializers$StringSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 113
MapSerializer.serializeFields(Map<?,?>, JsonGenerator, SerializerProvider) line: 257
MapSerializer.serialize(Map<?,?>, JsonGenerator, SerializerProvider) line: 177
MapSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 22
BeanPropertyWriter.serializeAsField(Object, JsonGenerator, SerializerProvider) line: 428
BeanSerializer.serializeFields(Object, JsonGenerator, SerializerProvider) line: 245
BeanSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 212
ContainerSerializers$IndexedListSerializer.serializeContents(List<?>, JsonGenerator, SerializerProvider) line: 291
ContainerSerializers$IndexedListSerializer.serializeContents(Object, JsonGenerator, SerializerProvider) line: 242
ContainerSerializers$IndexedListSerializer(ContainerSerializers$AsArraySerializer<T>).serialize(T, JsonGenerator, SerializerProvider) line: 130
BeanPropertyWriter.serializeAsField(Object, JsonGenerator, SerializerProvider) line: 428
BeanSerializer.serializeFields(Object, JsonGenerator, SerializerProvider) line: 245
BeanSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 212
StdSerializerProvider._serializeValue(JsonGenerator, Object) line: 587
StdSerializerProvider.serializeValue(SerializationConfig, JsonGenerator, Object, SerializerFactory) line: 245
JsonUtils$MyObjectMapper(ObjectMapper)._configAndWriteValue(JsonGenerator, Object) line: 1993
JsonUtils$MyObjectMapper(ObjectMapper).writeValue(OutputStream, Object) line: 1563
JsonUtils.toJson(Object, OutputStream) line: 340
SearchServlet.writeResponse(ServletResponse, Object) line: 601
SearchServlet.access$2(SearchServlet, ServletResponse, Object) line: 598
SearchServlet$3.hasFinished(PartialSearchContinuation) line: 392
SearchServlet$3.run() line: 414
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1110
ThreadPoolExecutor$Worker.run() line: 603
Thread.run() line: 722


On Fri, Nov 11, 2011 at 5:37 PM, Matthew Painter <matthew.painter@xxxxxxxxxx> wrote:
It would seem similar to this:


Although this was said to be fixed.



On Fri, Nov 11, 2011 at 5:23 PM, Matthew Painter <matthew.painter@xxxxxxxxxx> wrote:
Hi all,

I wonder if any of you bright sparks can shed some light on this problem with Jetty 7.5.1?

I have a response that is bigger than the standard servlet buffer size (32,768). 

I am using the continuation suspend/complete pattern.

When writing to the response outputstream, 32768 bytes are written to the client, and then the thread hangs forever on SelectChannelEndpoint.blockWritable() - maybe deadlocked?

This is a huge issue for us, as it brings down the server as threads get deadlocked.

Any information would be great - I can see a few similar bugs have been raised, but none quite the same.

Thanks :)

Daemon Thread [Thread-111] (Suspended)
Object.wait(long) line: not available [native method]
SelectChannelEndPoint.blockWritable(long) line: 384
HttpGenerator(AbstractGenerator).blockForOutput(long) line: 530
HttpGenerator(AbstractGenerator).flush(long) line: 456
HttpConnection$Output(HttpOutput).flush() line: 89
HttpConnection$Output.flush() line: 995
HttpConnection$Output(HttpOutput).write(Buffer) line: 172
HttpConnection$Output(HttpOutput).write(byte[], int, int) line: 96
Utf8Generator._flushBuffer() line: 1437
Utf8Generator.writeString(String) line: 465
StdSerializers$StringSerializer.serialize(String, JsonGenerator, SerializerProvider) line: 123
StdSerializers$StringSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 113
MapSerializer.serializeFields(Map<?,?>, JsonGenerator, SerializerProvider) line: 257
MapSerializer.serialize(Map<?,?>, JsonGenerator, SerializerProvider) line: 177
MapSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 22
ContainerSerializers$IndexedListSerializer.serializeContents(List<?>, JsonGenerator, SerializerProvider) line: 291
ContainerSerializers$IndexedListSerializer.serializeContents(Object, JsonGenerator, SerializerProvider) line: 242
ContainerSerializers$IndexedListSerializer(ContainerSerializers$AsArraySerializer<T>).serialize(T, JsonGenerator, SerializerProvider) line: 130
MapSerializer.serializeFields(Map<?,?>, JsonGenerator, SerializerProvider) line: 257
MapSerializer.serialize(Map<?,?>, JsonGenerator, SerializerProvider) line: 177
MapSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 22
MapSerializer.serializeFields(Map<?,?>, JsonGenerator, SerializerProvider) line: 257
MapSerializer.serialize(Map<?,?>, JsonGenerator, SerializerProvider) line: 177
MapSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 22
MapSerializer.serializeFields(Map<?,?>, JsonGenerator, SerializerProvider) line: 257
MapSerializer.serialize(Map<?,?>, JsonGenerator, SerializerProvider) line: 177
MapSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 22
ContainerSerializers$IndexedListSerializer.serializeContents(List<?>, JsonGenerator, SerializerProvider) line: 291
ContainerSerializers$IndexedListSerializer.serializeContents(Object, JsonGenerator, SerializerProvider) line: 242
ContainerSerializers$IndexedListSerializer(ContainerSerializers$AsArraySerializer<T>).serialize(T, JsonGenerator, SerializerProvider) line: 130
BeanPropertyWriter.serializeAsField(Object, JsonGenerator, SerializerProvider) line: 428
BeanSerializer.serializeFields(Object, JsonGenerator, SerializerProvider) line: 245
BeanSerializer.serialize(Object, JsonGenerator, SerializerProvider) line: 212
StdSerializerProvider._serializeValue(JsonGenerator, Object) line: 587
StdSerializerProvider.serializeValue(SerializationConfig, JsonGenerator, Object, SerializerFactory) line: 245
ObjectMapper(ObjectMapper)._configAndWriteValue(JsonGenerator, Object) line: 1993
ObjectMapper(ObjectMapper).writeValue(OutputStream, Object) line: 1563
...






Back to the top