Issue #4179 SendCallback GC

The HttpConnection.SendCallback nulls it's reference to buffers and callbacks after completion to assist with easy GC, since the connection callback is a long lived instance.

Signed-off-by: Greg Wilkins <gregw@webtide.com>
This commit is contained in:
Greg Wilkins 2019-10-10 09:09:53 +11:00
parent b48873f33b
commit faac5d7f04
1 changed files with 10 additions and 8 deletions

View File

@ -848,19 +848,22 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http
}
}
private void releaseHeader()
private Callback release()
{
ByteBuffer h = _header;
Callback complete = _callback;
_callback = null;
_info = null;
_content = null;
if (_header != null)
_bufferPool.release(_header);
_header = null;
if (h != null)
_bufferPool.release(h);
return complete;
}
@Override
protected void onCompleteSuccess()
{
releaseHeader();
_callback.succeeded();
release().succeeded();
if (_shutdownOut)
getEndPoint().shutdownOutput();
}
@ -868,8 +871,7 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http
@Override
public void onCompleteFailure(final Throwable x)
{
releaseHeader();
failedCallback(_callback, x);
failedCallback(release(), x);
if (_shutdownOut)
getEndPoint().shutdownOutput();
}