diff --git a/common/src/main/java/io/netty/util/internal/DeadLockProofWorker.java b/common/src/main/java/io/netty/util/internal/DeadLockProofWorker.java
deleted file mode 100644
index 14406d6584..0000000000
--- a/common/src/main/java/io/netty/util/internal/DeadLockProofWorker.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2012 The Netty Project
- *
- * The Netty Project 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.
- */
-package io.netty.util.internal;
-
-import java.util.concurrent.Executor;
-
-/**
- */
-public final class DeadLockProofWorker {
-
- /**
- * An internal use only thread-local variable that tells the
- * {@link Executor} that this worker acquired a worker thread from.
- */
- public static final ThreadLocal PARENT = new ThreadLocal();
-
- public static void start(final Executor parent, final Runnable runnable) {
- if (parent == null) {
- throw new NullPointerException("parent");
- }
- if (runnable == null) {
- throw new NullPointerException("runnable");
- }
-
- parent.execute(new Runnable() {
- @Override
- public void run() {
- PARENT.set(parent);
- try {
- runnable.run();
- } finally {
- PARENT.remove();
- }
- }
- });
- }
-
- private DeadLockProofWorker() {
- }
-}
diff --git a/common/src/main/java/io/netty/util/internal/ExecutorUtil.java b/common/src/main/java/io/netty/util/internal/ExecutorUtil.java
deleted file mode 100644
index a6892718af..0000000000
--- a/common/src/main/java/io/netty/util/internal/ExecutorUtil.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2012 The Netty Project
- *
- * The Netty Project 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.
- */
-package io.netty.util.internal;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Shuts down a list of {@link Executor}s. {@link #terminate(Executor...)} will
- * shut down all specified {@link ExecutorService}s immediately and wait for
- * their termination. An {@link Executor} which is not an {@link ExecutorService}
- * will be ignored silently.
- */
-public final class ExecutorUtil {
-
- /**
- * Returns {@code true} if and only if the specified {@code executor}
- * is an {@link ExecutorService} and is shut down. Please note that this
- * method returns {@code false} if the specified {@code executor} is not an
- * {@link ExecutorService}.
- */
- public static boolean isShutdown(Executor executor) {
- if (executor instanceof ExecutorService) {
- if (((ExecutorService) executor).isShutdown()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Shuts down the specified executors.
- */
- public static void terminate(Executor... executors) {
- // Check nulls.
- if (executors == null) {
- throw new NullPointerException("executors");
- }
-
- Executor[] executorsCopy = new Executor[executors.length];
- for (int i = 0; i < executors.length; i ++) {
- if (executors[i] == null) {
- throw new NullPointerException("executors[" + i + "]");
- }
- executorsCopy[i] = executors[i];
- }
-
- // Check dead lock.
- final Executor currentParent = DeadLockProofWorker.PARENT.get();
- if (currentParent != null) {
- for (Executor e: executorsCopy) {
- if (e == currentParent) {
- throw new IllegalStateException(
- "An Executor cannot be shut down from the thread " +
- "acquired from itself. Please make sure you are " +
- "not calling releaseExternalResources() from an " +
- "I/O worker thread.");
- }
- }
- }
-
- // Shut down all executors.
- boolean interrupted = false;
- for (Executor e: executorsCopy) {
- if (!(e instanceof ExecutorService)) {
- continue;
- }
-
- ExecutorService es = (ExecutorService) e;
- for (;;) {
- try {
- es.shutdownNow();
- } catch (SecurityException ex) {
- // Running in a restricted environment - fall back.
- try {
- es.shutdown();
- } catch (SecurityException ex2) {
- // Running in a more restricted environment.
- // Can't shut down this executor - skip to the next.
- break;
- } catch (NullPointerException ex2) {
- // Some JDK throws NPE here, but shouldn't.
- }
- } catch (NullPointerException ex) {
- // Some JDK throws NPE here, but shouldn't.
- }
-
- try {
- if (es.awaitTermination(100, TimeUnit.MILLISECONDS)) {
- break;
- }
- } catch (InterruptedException ex) {
- interrupted = true;
- }
- }
- }
-
- if (interrupted) {
- Thread.currentThread().interrupt();
- }
- }
-
- private ExecutorUtil() {
- }
-}
diff --git a/common/src/main/java/io/netty/util/internal/NonReentrantLock.java b/common/src/main/java/io/netty/util/internal/NonReentrantLock.java
deleted file mode 100644
index 32f32fa5b9..0000000000
--- a/common/src/main/java/io/netty/util/internal/NonReentrantLock.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2012 The Netty Project
- *
- * The Netty Project 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.
- */
-package io.netty.util.internal;
-
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.AbstractQueuedSynchronizer;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-
-/**
- * A custom implementation of a lock that does not allow reentry
- */
-public final class NonReentrantLock extends AbstractQueuedSynchronizer
- implements Lock {
-
- /**
- * The serial version unique ID
- */
- private static final long serialVersionUID = -833780837233068610L;
-
- /**
- * The {@link Thread} that owns this {@link NonReentrantLock}
- */
- private Thread owner;
-
- /**
- * Locks this {@link NonReentrantLock}
- */
- @Override
- public void lock() {
- acquire(1);
- }
-
- /**
- * Locks this {@link NonReentrantLock}, but allow interruption
- *
- * @throws InterruptedException The lock was interrupted
- */
- @Override
- public void lockInterruptibly() throws InterruptedException {
- acquireInterruptibly(1);
- }
-
- /**
- * Try to lock this {@link NonReentrantLock}
- *
- * @return True if locking was successful, otherwise false
- */
- @Override
- public boolean tryLock() {
- return tryAcquire(1);
- }
-
- /**
- * Tries to lock this {@link NonReentrantLock} over a period of time
- *
- * @param time The maximum number of time units to attempt to get a lock for.
- * @param unit The {@link TimeUnit} associated with the time parameter
- * @return True if the lock was successful, otherwise false
- * @throws InterruptedException The locking attempt was interrupted
- */
- @Override
- public boolean tryLock(long time, TimeUnit unit)
- throws InterruptedException {
- return tryAcquireNanos(1, unit.toNanos(time));
- }
-
- /**
- * Unlocks this {@link NonReentrantLock}
- */
- @Override
- public void unlock() {
- release(1);
- }
-
- /**
- * Checks to see if this {@link NonReentrantLock} is held by the current {@link Thread}
- *
- * @return True if held by the current thread, otherwise false
- */
- public boolean isHeldByCurrentThread() {
- return isHeldExclusively();
- }
-
- /**
- * Creates a new {@link Condition}
- *
- * @return The condition object
- */
- @Override
- public Condition newCondition() {
- return new ConditionObject();
- }
-
- /**
- * Try to acquire a lock
- *
- * @param acquires A number that is sent by acquiring methods
- * @return True if a lock is acquired, otherwise false
- */
- @Override
- protected boolean tryAcquire(int acquires) {
- if (compareAndSetState(0, 1)) {
- owner = Thread.currentThread();
- return true;
- }
- return false;
- }
-
- /**
- * Tries to release the lock
- *
- * @param releases A number that is passed by the release methods
- * @return True if a release is granted, otherwise false
- */
- @Override
- protected boolean tryRelease(int releases) {
- if (Thread.currentThread() != owner) {
- throw new IllegalMonitorStateException();
- }
- owner = null;
- setState(0);
- return true;
- }
-
- /**
- * Checks to see if this {@link NonReentrantLock} is held exclusively by the current {@link Thread}
- *
- * @return True if held exclusively, otherwise false
- */
- @Override
- protected boolean isHeldExclusively() {
- return getState() != 0 && owner == Thread.currentThread();
- }
-}
diff --git a/common/src/main/java/io/netty/util/internal/StringUtil.java b/common/src/main/java/io/netty/util/internal/StringUtil.java
index a82e7af4d9..ecdd72b8e2 100644
--- a/common/src/main/java/io/netty/util/internal/StringUtil.java
+++ b/common/src/main/java/io/netty/util/internal/StringUtil.java
@@ -38,80 +38,6 @@ public final class StringUtil {
}
NEWLINE = newLine;
- }
- /**
- * Strip an Object of it's ISO control characters.
- *
- * @param value
- * The Object that should be stripped. This objects toString method will
- * called and the result passed to {@link #stripControlCharacters(String)}.
- * @return {@code String}
- * A new String instance with its hexadecimal control characters replaced
- * by a space. Or the unmodified String if it does not contain any ISO
- * control characters.
- */
- public static String stripControlCharacters(Object value) {
- if (value == null) {
- return null;
- }
-
- return stripControlCharacters(value.toString());
- }
-
- /**
- * Strip a String of it's ISO control characters.
- *
- * @param value
- * The String that should be stripped.
- * @return {@code String}
- * A new String instance with its hexadecimal control characters replaced
- * by a space. Or the unmodified String if it does not contain any ISO
- * control characters.
- */
- public static String stripControlCharacters(String value) {
- if (value == null) {
- return null;
- }
-
- boolean hasControlChars = false;
- for (int i = value.length() - 1; i >= 0; i --) {
- if (Character.isISOControl(value.charAt(i))) {
- hasControlChars = true;
- break;
- }
- }
-
- if (!hasControlChars) {
- return value;
- }
-
- StringBuilder buf = new StringBuilder(value.length());
- int i = 0;
-
- // Skip initial control characters (i.e. left trim)
- for (; i < value.length(); i ++) {
- if (!Character.isISOControl(value.charAt(i))) {
- break;
- }
- }
-
- // Copy non control characters and substitute control characters with
- // a space. The last control characters are trimmed.
- boolean suppressingControlChars = false;
- for (; i < value.length(); i ++) {
- if (Character.isISOControl(value.charAt(i))) {
- suppressingControlChars = true;
- continue;
- } else {
- if (suppressingControlChars) {
- suppressingControlChars = false;
- buf.append(' ');
- }
- buf.append(value.charAt(i));
- }
- }
-
- return buf.toString();
}
}
diff --git a/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java b/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java
index 9bef749292..977e28918e 100644
--- a/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java
+++ b/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java
@@ -20,7 +20,7 @@ import java.util.regex.Pattern;
/**
* Accesses the system property swallowing a {@link SecurityException}.
*/
-public final class SystemPropertyUtil {
+final class SystemPropertyUtil {
/**
* Returns the value of the Java system property with the specified
diff --git a/common/src/main/java/io/netty/util/internal/ThreadLocalBoolean.java b/common/src/main/java/io/netty/util/internal/ThreadLocalBoolean.java
deleted file mode 100644
index c262c7104c..0000000000
--- a/common/src/main/java/io/netty/util/internal/ThreadLocalBoolean.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2012 The Netty Project
- *
- * The Netty Project 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.
- */
-package io.netty.util.internal;
-
-public class ThreadLocalBoolean extends ThreadLocal {
-
- private final boolean defaultValue;
-
- public ThreadLocalBoolean() {
- this(false);
- }
-
- public ThreadLocalBoolean(boolean defaultValue) {
- this.defaultValue = defaultValue;
- }
-
- @Override
- protected Boolean initialValue() {
- return defaultValue? Boolean.TRUE : Boolean.FALSE;
- }
-}
diff --git a/common/src/main/java/io/netty/util/internal/UnterminatableExecutor.java b/common/src/main/java/io/netty/util/internal/UnterminatableExecutor.java
deleted file mode 100644
index e8b111d949..0000000000
--- a/common/src/main/java/io/netty/util/internal/UnterminatableExecutor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2012 The Netty Project
- *
- * The Netty Project 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.
- */
-package io.netty.util.internal;
-
-import java.util.concurrent.Executor;
-
-/**
- * Disables shutdown of an {@link Executor} by wrapping the {@link Executor}.
- */
-public class UnterminatableExecutor implements Executor {
-
- private final Executor executor;
-
- public UnterminatableExecutor(Executor executor) {
- if (executor == null) {
- throw new NullPointerException("executor");
- }
- this.executor = executor;
- }
-
- @Override
- public void execute(Runnable command) {
- executor.execute(command);
- }
-}
diff --git a/common/src/test/java/io/netty/util/internal/StringUtilTest.java b/common/src/test/java/io/netty/util/internal/StringUtilTest.java
deleted file mode 100644
index b77ca465db..0000000000
--- a/common/src/test/java/io/netty/util/internal/StringUtilTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2012 The Netty Project
- *
- * The Netty Project 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.
- */
-package io.netty.util.internal;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-/**
- * Unit test for {@link StringUtil}.
- */
-public class StringUtilTest {
-
- @Test
- public void stripControlCharactersObjectNull() {
- assertNull(StringUtil.stripControlCharacters(null));
- }
-
- @Test
- public void stripControlCharactersNull() {
- assertNull(StringUtil.stripControlCharacters((String) null));
- }
-
- @Test
- public void stripControlCharactersRightTrim() {
- final char controlCode = 0x0000;
- final Object object = "abbb" + controlCode;
- assertEquals(5, ((String) object).length());
-
- final String stripped = StringUtil.stripControlCharacters(object);
- assertFalse(object.equals(stripped));
- assertEquals(4, stripped.length());
- }
-
- @Test
- public void stripControlCharactersLeftTrim() {
- final char controlCode = 0x0000;
- final String string = controlCode + "abbb";
- assertEquals(5, string.length());
-
- final String stripped = StringUtil.stripControlCharacters(string);
- assertFalse(string.equals(stripped));
- assertEquals(4, stripped.length());
- }
-
- @Test
- public void stripControlCharacters() {
- for (char i = 0x0000; i <= 0x001F; i ++) {
- assertStripped(i);
- }
- for (char i = 0x007F; i <= 0x009F; i ++) {
- assertStripped(i);
- }
- }
-
- private static void assertStripped(final char controlCode) {
- final Object object = "aaa" + controlCode + "bbb";
- final String stripped = StringUtil.stripControlCharacters(object);
- assertEquals("aaa bbb", stripped);
- }
-
- @Test
- public void stripNonControlCharacter() {
- final char controlCode = 0x002F;
- final String string = controlCode + "abbb";
- final String stripped = StringUtil.stripControlCharacters(string);
- assertEquals("The string should be unchanged", string, stripped);
- }
-}
diff --git a/transport/src/main/java/io/netty/channel/group/DefaultChannelGroupFuture.java b/transport/src/main/java/io/netty/channel/group/DefaultChannelGroupFuture.java
index abc534700e..8f0b1ab409 100755
--- a/transport/src/main/java/io/netty/channel/group/DefaultChannelGroupFuture.java
+++ b/transport/src/main/java/io/netty/channel/group/DefaultChannelGroupFuture.java
@@ -21,7 +21,6 @@ import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.logging.InternalLogger;
import io.netty.logging.InternalLoggerFactory;
-import io.netty.util.internal.DeadLockProofWorker;
import java.util.ArrayList;
import java.util.Collection;
@@ -216,7 +215,6 @@ public class DefaultChannelGroupFuture implements ChannelGroupFuture {
synchronized (this) {
while (!done) {
- checkDeadLock();
waiters++;
try {
wait();
@@ -244,7 +242,6 @@ public class DefaultChannelGroupFuture implements ChannelGroupFuture {
boolean interrupted = false;
synchronized (this) {
while (!done) {
- checkDeadLock();
waiters++;
try {
wait();
@@ -298,7 +295,6 @@ public class DefaultChannelGroupFuture implements ChannelGroupFuture {
return done;
}
- checkDeadLock();
waiters++;
try {
for (;;) {
@@ -332,15 +328,6 @@ public class DefaultChannelGroupFuture implements ChannelGroupFuture {
}
}
- private static void checkDeadLock() {
- if (DeadLockProofWorker.PARENT.get() != null) {
- throw new IllegalStateException(
- "await*() in I/O thread causes a dead lock or " +
- "sudden performance drop. Use addListener() instead or " +
- "call await*() from a different thread.");
- }
- }
-
void setDone() {
synchronized (this) {
// Allow only once.