diff --git a/build.gradle b/build.gradle
index f456ace03a..2b8824db9e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -244,7 +244,10 @@ subprojects {
systemProperty("reactor.trace.cancel", "true")
systemProperty("reactor.trace.nocapacity", "true")
systemProperty("testGroups", project.properties.get("testGroups"))
- systemProperty("io.netty.leakDetection.level", "paranoid")
+ systemProperty("io.netty5.leakDetectionLevel", "paranoid")
+ systemProperty("io.netty5.leakDetection.targetRecords", "32")
+ systemProperty("io.netty5.buffer.lifecycleTracingEnabled", "true")
+ systemProperty("io.netty5.buffer.leakDetectionEnabled", "true")
systemProperty("reactor.netty5.pool.getPermitsSamplingRate", "0.5")
systemProperty("reactor.netty5.pool.returnPermitsSamplingRate", "0.5")
if (project.hasProperty("forceTransport")) {
@@ -270,11 +273,8 @@ subprojects {
onOutput { descriptor, event ->
def evMsg = event.message
- if (evMsg.contains("ResourceLeakDetector")) {
- if (!evMsg.contains(" -Dio.netty.leakDetection")
- && !evMsg.contains("DEBUG io.netty.util.ResourceLeakDetectorFactory")) {
- logger.error("ERROR: Test: " + descriptor + " produced resource leak: " + event.message)
- }
+ if (evMsg.contains("LoggingLeakCallback")) {
+ logger.error("ERROR: Test: " + descriptor + " produced resource leak: " + event.message)
}
}
}
diff --git a/reactor-netty5-core/src/main/java/reactor/netty5/NettyOutbound.java b/reactor-netty5-core/src/main/java/reactor/netty5/NettyOutbound.java
index 9ae15ea9a8..94c4b697bc 100644
--- a/reactor-netty5-core/src/main/java/reactor/netty5/NettyOutbound.java
+++ b/reactor-netty5-core/src/main/java/reactor/netty5/NettyOutbound.java
@@ -20,7 +20,6 @@
import java.nio.channels.FileChannel;
import java.nio.channels.WritableByteChannel;
import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
@@ -41,8 +40,6 @@
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
-import static reactor.netty5.ReactorNetty.PREDICATE_GROUP_BOUNDARY;
-
/**
* An outbound-traffic API delegating to an underlying {@link Channel}.
*
Note: With HTTP, chaining multiple send operations is discouraged and will not work as expected
@@ -230,12 +227,10 @@ default NettyOutbound sendFileChunked(Path file, long position, long count) {
* any error during write
*/
default NettyOutbound sendGroups(Publisher extends Publisher extends Buffer>> dataStreams) {
- Buffer BOUNDARY = alloc().copyOf(PREDICATE_GROUP_BOUNDARY.getBytes(StandardCharsets.UTF_8)).makeReadOnly();
return send(
Flux.from(dataStreams)
.concatMap(p -> Flux.from(p)
- .concatWith(Mono.just(BOUNDARY.copy(0, BOUNDARY.readableBytes(), true))), 32)
- .doFinally(sig -> BOUNDARY.close()),
+ .concatWith(Mono.just(ReactorNetty.BOUNDARY)), 32),
ReactorNetty.PREDICATE_GROUP_FLUSH);
}
diff --git a/reactor-netty5-core/src/main/java/reactor/netty5/ReactorNetty.java b/reactor-netty5-core/src/main/java/reactor/netty5/ReactorNetty.java
index d733353daa..51db4bd90c 100644
--- a/reactor-netty5-core/src/main/java/reactor/netty5/ReactorNetty.java
+++ b/reactor-netty5-core/src/main/java/reactor/netty5/ReactorNetty.java
@@ -17,7 +17,6 @@
import java.net.SocketAddress;
import java.nio.channels.FileChannel;
-import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.time.ZoneId;
import java.util.List;
@@ -35,6 +34,7 @@
import io.netty5.buffer.Buffer;
import io.netty5.buffer.BufferAllocator;
import io.netty5.buffer.BufferHolder;
+import io.netty5.buffer.MemoryManager;
import io.netty5.channel.nio.AbstractNioChannel;
import io.netty5.util.Resource;
import io.netty5.channel.Channel;
@@ -999,6 +999,8 @@ public synchronized Throwable fillInStackTrace() {
static final Predicate