Merge branch 'gerrit/neo' into 'gerrit/trinity'
Change-Id: I641d2dcc68c540082ae6cabb43598fd3abf7344a
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java
index 9a940b1..b313cbb 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/ChunkedNettyOutputStream.java
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.io.OutputStream;
+import org.apache.hyracks.api.util.InvokeUtil;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -81,20 +82,22 @@
@Override
public void close() throws IOException {
if (!closed) {
- if (response.isHeaderSent() || response.status() != HttpResponseStatus.OK) {
- try {
+ InvokeUtil.tryIoWithCleanups(() -> {
+ if (response.isHeaderSent() || response.status() != HttpResponseStatus.OK) {
flush();
- } finally {
- if (buffer != null) {
- buffer.release();
- }
+ } else {
+ response.fullResponse(buffer);
+ // The responsibility of releasing the buffer is now with the netty pipeline since it is
+ // forwarded within the http content. We must nullify buffer to avoid releasing the buffer twice.
+ buffer = null;
}
- } else {
- response.fullResponse(buffer);
- }
- super.close();
+ super.close();
+ }, () -> {
+ if (buffer != null) {
+ buffer.release();
+ }
+ }, () -> closed = true);
}
- closed = true;
}
@Override