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)
{
_state = State.CLOSED;
releaseBuffer();
}
releaseBuffer();
}
@Override
@ -601,10 +601,13 @@ public class HttpOutput extends ServletOutputStream implements Runnable
public ByteBuffer getBuffer()
{
return _aggregate;
synchronized (_channelState)
{
return acquireBuffer();
}
}
public ByteBuffer acquireBuffer()
private ByteBuffer acquireBuffer()
{
if (_aggregate == null)
_aggregate = _channel.getByteBufferPool().acquire(getBufferSize(), _channel.isUseOutputDirectByteBuffers());
@ -1362,10 +1365,13 @@ public class HttpOutput extends ServletOutputStream implements Runnable
public void resetBuffer()
{
_interceptor.resetBuffer();
if (BufferUtil.hasContent(_aggregate))
BufferUtil.clear(_aggregate);
_written = 0;
synchronized (_channelState)
{
_interceptor.resetBuffer();
if (BufferUtil.hasContent(_aggregate))
BufferUtil.clear(_aggregate);
_written = 0;
}
}
@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 again with stacks disabled. If it still overflows, it is
// TODO written without a body.
ByteBuffer buffer = baseRequest.getResponse().getHttpOutput().acquireBuffer();
ByteBuffer buffer = baseRequest.getResponse().getHttpOutput().getBuffer();
ByteBufferOutputStream out = new ByteBufferOutputStream(buffer);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, charset));