From 923e69251b20c30e78b28c31201c80a709b30b83 Mon Sep 17 00:00:00 2001 From: Michael Morello Date: Thu, 24 Jan 2013 15:11:27 +0100 Subject: [PATCH] NioServerBossPool : init() must be called after super(...) otherwise thread name determiner is not used --- .../channel/socket/nio/NioServerBossPool.java | 3 +- .../socket/nio/NioServerBossPoolTest.java | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/jboss/netty/channel/socket/nio/NioServerBossPoolTest.java diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioServerBossPool.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioServerBossPool.java index fd282cc311..732b700f71 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioServerBossPool.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioServerBossPool.java @@ -35,8 +35,9 @@ public class NioServerBossPool extends AbstractNioBossPool { * if you not want to set one explicit. */ public NioServerBossPool(Executor bossExecutor, int bossCount, ThreadNameDeterminer determiner) { - super(bossExecutor, bossCount); + super(bossExecutor, bossCount, false); this.determiner = determiner; + init(); } /** diff --git a/src/test/java/org/jboss/netty/channel/socket/nio/NioServerBossPoolTest.java b/src/test/java/org/jboss/netty/channel/socket/nio/NioServerBossPoolTest.java new file mode 100644 index 0000000000..dbffc1d416 --- /dev/null +++ b/src/test/java/org/jboss/netty/channel/socket/nio/NioServerBossPoolTest.java @@ -0,0 +1,58 @@ +package org.jboss.netty.channel.socket.nio; + +import static org.junit.Assert.*; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import org.jboss.netty.util.ThreadNameDeterminer; +import org.jboss.netty.util.internal.ExecutorUtil; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +public class NioServerBossPoolTest { + + private static ExecutorService executor; + + @BeforeClass + public static void init() { + executor = Executors.newCachedThreadPool(); + } + + @AfterClass + public static void destroy() { + ExecutorUtil.terminate(executor); + } + + private static final String MY_CUSTOM_THREAD_NAME = "FOO"; + + private final ThreadNameDeterminer determiner = new ThreadNameDeterminer() { + + public String determineThreadName(String currentThreadName, + String proposedThreadName) throws Exception { + return MY_CUSTOM_THREAD_NAME; + } + + }; + + @Test + public void testNioServerBossPoolExecutorIntThreadNameDeterminer() + throws Exception { + NioServerBossPool bossPool = null; + try { + bossPool = new NioServerBossPool(executor, 1, determiner); + NioServerBoss nextBoss = bossPool.nextBoss(); + assertNotNull(nextBoss); + // Wait for ThreadRenamingRunnable to be run by the executor + Thread.sleep(1000); + // Ok, now there should be thread + assertNotNull(nextBoss.thread); + assertEquals(MY_CUSTOM_THREAD_NAME, nextBoss.thread.getName()); + } finally { + if (bossPool != null) { + bossPool.shutdown(); + } + } + } +}