Repository: camel Updated Branches: refs/heads/master b4a6ad4cf -> 8efbf0303
CAMEL-9040: Fixed netty leak in http4 producer Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8efbf030 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8efbf030 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8efbf030 Branch: refs/heads/master Commit: 8efbf0303949c0f0e4e02f9309f6c35c24ccfa9e Parents: 9fc3e43 Author: Claus Ibsen <davscl...@apache.org> Authored: Wed May 4 14:06:26 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed May 4 14:07:56 2016 +0200 ---------------------------------------------------------------------- components/camel-netty4-http/run-test-leak.sh | 31 ++++++++++++++++++++ .../netty4/http/DefaultNettyHttpBinding.java | 9 ++---- 2 files changed, 33 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/8efbf030/components/camel-netty4-http/run-test-leak.sh ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/run-test-leak.sh b/components/camel-netty4-http/run-test-leak.sh new file mode 100755 index 0000000..409a814 --- /dev/null +++ b/components/camel-netty4-http/run-test-leak.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +## --------------------------------------------------------------------------- +## Licensed to the Apache Software Foundation (ASF) under one or more +## contributor license agreements. See the NOTICE file distributed with +## this work for additional information regarding copyright ownership. +## The ASF licenses this file to You under the Apache License, Version 2.0 +## (the "License"); you may not use this file except in compliance with +## the License. You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## --------------------------------------------------------------------------- + +echo 'Running tests with Netty leak detection ...' +mvn clean install -Dio.netty.leakDetectionLevel=paranoid -Dio.netty.leakDetection.maxRecords=20 + +echo 'Checking log file if there is any leaks ...' + +if grep LEAK target/camel-netty4-http-test.log; then + echo 'LEAK found' + exit 1 +else + echo 'No LEAK found' + exit 0 +fi http://git-wip-us.apache.org/repos/asf/camel/blob/8efbf030/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java index 9f94ea0..6364f9a 100644 --- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java +++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/DefaultNettyHttpBinding.java @@ -16,9 +16,7 @@ */ package org.apache.camel.component.netty4.http; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.InputStream; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.io.StringWriter; @@ -46,11 +44,9 @@ import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.NoTypeConversionAvailableException; import org.apache.camel.RuntimeCamelException; -import org.apache.camel.StreamCache; import org.apache.camel.TypeConverter; import org.apache.camel.component.netty4.NettyConstants; import org.apache.camel.component.netty4.NettyConverter; -import org.apache.camel.converter.stream.ByteArrayInputStreamCache; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.util.ExchangeHelper; import org.apache.camel.util.IOHelper; @@ -276,12 +272,11 @@ public class DefaultNettyHttpBinding implements NettyHttpBinding, Cloneable { // keep the body as is, and use type converters answer.setBody(response.content()); } else { - // stores as byte array as the netty ByteBuf will be freed when the producer is done, - // and then we can no longer access the message body + // stores as byte array as the netty ByteBuf will be freed when the producer is done, and then we can no longer access the message body response.retain(); try { byte[] bytes = exchange.getContext().getTypeConverter().convertTo(byte[].class, exchange, response.content()); - answer.setBody(new ByteArrayInputStreamCache(new ByteArrayInputStream(bytes))); + answer.setBody(bytes); } finally { response.release(); }