Merge remote-tracking branch 'origin/jetty-9.4.x' into jetty-10.0.x

This commit is contained in:
Greg Wilkins 2020-05-11 21:48:31 +02:00
commit 3b33ed2af2
2 changed files with 14 additions and 8 deletions

View File

@ -475,8 +475,8 @@ public class HttpOutput extends ServletOutputStream implements Runnable
synchronized (_channelState) synchronized (_channelState)
{ {
_state = State.CLOSED; _state = State.CLOSED;
releaseBuffer();
} }
releaseBuffer();
} }
@Override @Override
@ -601,10 +601,13 @@ public class HttpOutput extends ServletOutputStream implements Runnable
public ByteBuffer getBuffer() public ByteBuffer getBuffer()
{ {
return _aggregate; synchronized (_channelState)
{
return acquireBuffer();
}
} }
public ByteBuffer acquireBuffer() private ByteBuffer acquireBuffer()
{ {
if (_aggregate == null) if (_aggregate == null)
_aggregate = _channel.getByteBufferPool().acquire(getBufferSize(), _channel.isUseOutputDirectByteBuffers()); _aggregate = _channel.getByteBufferPool().acquire(getBufferSize(), _channel.isUseOutputDirectByteBuffers());
@ -1362,10 +1365,13 @@ public class HttpOutput extends ServletOutputStream implements Runnable
public void resetBuffer() public void resetBuffer()
{ {
_interceptor.resetBuffer(); synchronized (_channelState)
if (BufferUtil.hasContent(_aggregate)) {
BufferUtil.clear(_aggregate); _interceptor.resetBuffer();
_written = 0; if (BufferUtil.hasContent(_aggregate))
BufferUtil.clear(_aggregate);
_written = 0;
}
} }
@Override @Override

View File

@ -298,7 +298,7 @@ public class ErrorHandler extends AbstractHandler
// TODO error page may cause a BufferOverflow. In which case we try // TODO error page may cause a BufferOverflow. In which case we try
// TODO again with stacks disabled. If it still overflows, it is // TODO again with stacks disabled. If it still overflows, it is
// TODO written without a body. // TODO written without a body.
ByteBuffer buffer = baseRequest.getResponse().getHttpOutput().acquireBuffer(); ByteBuffer buffer = baseRequest.getResponse().getHttpOutput().getBuffer();
ByteBufferOutputStream out = new ByteBufferOutputStream(buffer); ByteBufferOutputStream out = new ByteBufferOutputStream(buffer);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, charset)); PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, charset));