You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/10/25 08:20:06 UTC
svn commit: r588150 - in /mina:
branches/1.0/core/src/main/java/org/apache/mina/common/
branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/
branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/
branches/1.0/cor...
Author: trustin
Date: Wed Oct 24 23:20:04 2007
New Revision: 588150
URL: http://svn.apache.org/viewvc?rev=588150&view=rev
Log:
Resolved issue: DIRMINA-462 (Thread.setName causes SecurityException in sandbox contexts (such as Applets))
* Moved all Thread.setName call to NamePerservingRunnable
Modified:
mina/branches/1.0/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
mina/branches/1.0/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java
mina/branches/1.1/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
mina/branches/1.1/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java
mina/trunk/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java Wed Oct 24 23:20:04 2007
@@ -23,6 +23,7 @@
import java.util.Map;
import org.apache.mina.filter.executor.ExecutorFilter;
+import org.apache.mina.util.NamePreservingRunnable;
import edu.emory.mathcs.backport.java.util.concurrent.Executor;
import edu.emory.mathcs.backport.java.util.concurrent.ThreadFactory;
@@ -89,9 +90,11 @@
private final AtomicInteger threadId = new AtomicInteger(0);
public Thread newThread(Runnable runnable) {
- Thread t = originalThreadFactory.newThread(runnable);
- t.setName(ExecutorThreadModel.this.threadNamePrefix + '-'
- + threadId.incrementAndGet());
+ Thread t = originalThreadFactory.newThread(
+ new NamePreservingRunnable(
+ runnable,
+ ExecutorThreadModel.this.threadNamePrefix + '-' +
+ threadId.incrementAndGet()));
t.setDaemon(true);
return t;
}
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java Wed Oct 24 23:20:04 2007
@@ -179,7 +179,7 @@
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
}
}
@@ -237,8 +237,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName(SocketAcceptor.this.threadName);
-
Selector selector = getSelector();
for (;;) {
try {
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java Wed Oct 24 23:20:04 2007
@@ -245,7 +245,7 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
}
}
@@ -374,8 +374,6 @@
private long lastActive = System.currentTimeMillis();
public void run() {
- Thread.currentThread().setName(SocketConnector.this.threadName);
-
Selector selector = getSelector();
for (;;) {
try {
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java Wed Oct 24 23:20:04 2007
@@ -94,7 +94,7 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
selector.wakeup();
}
@@ -506,8 +506,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName(SocketIoProcessor.this.threadName);
-
Selector selector = getSelector();
for (;;) {
try {
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java Wed Oct 24 23:20:04 2007
@@ -282,7 +282,8 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(
+ new NamePreservingRunnable(worker, "DatagramAcceptor-" + id));
}
}
@@ -311,8 +312,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName("DatagramAcceptor-" + id);
-
Selector selector = DatagramAcceptorDelegate.this.getSelector();
for (;;) {
try {
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Wed Oct 24 23:20:04 2007
@@ -203,7 +203,8 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(
+ new NamePreservingRunnable(worker, "DatagramConnector-" + id));
}
}
@@ -308,8 +309,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName("DatagramConnector-" + id);
-
Selector selector = getSelector();
for (;;) {
try {
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java Wed Oct 24 23:20:04 2007
@@ -18,27 +18,54 @@
*/
package org.apache.mina.util;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
- * A Runnable wrapper that preserves the name of the thread after the runnable is complete (for Runnables
- * that change the name of the Thread they use)
+ * A {@link Runnable} wrapper that preserves the name of the thread after the runnable is
+ * complete (for {@link Runnable}s that change the name of the Thread they use.)
*
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
+ * @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev: 446581 $, $Date: 2006-09-15 11:36:12Z $,
*/
public class NamePreservingRunnable implements Runnable {
+ private final Logger logger = LoggerFactory.getLogger(NamePreservingRunnable.class);
+
+ private final String newName;
private final Runnable runnable;
- public NamePreservingRunnable(Runnable runnable) {
+ public NamePreservingRunnable(Runnable runnable, String newName) {
this.runnable = runnable;
+ this.newName = newName;
}
public void run() {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String oldName = currentThread.getName();
+
+ if (newName != null) {
+ setName(currentThread, newName);
+ }
try {
runnable.run();
} finally {
- Thread.currentThread().setName(name);
+ setName(currentThread, oldName);
+ }
+ }
+
+ /**
+ * Wraps {@link Thread#setName(String)} to catch a possible {@link Exception}s such as
+ * {@link SecurityException} in sandbox environments, such as applets
+ */
+ private void setName(Thread thread, String name) {
+ try {
+ thread.setName(name);
+ } catch (Exception e) {
+ // Probably SecurityException.
+ if (logger.isWarnEnabled()) {
+ logger.warn("Failed to set the thread name.", e);
+ }
}
}
}
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/common/ExecutorThreadModel.java Wed Oct 24 23:20:04 2007
@@ -27,6 +27,7 @@
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.mina.filter.executor.ExecutorFilter;
+import org.apache.mina.util.NamePreservingRunnable;
/**
* A {@link ThreadModel} which represents a thread model with an {@link Executor}
@@ -87,9 +88,11 @@
private final AtomicInteger threadId = new AtomicInteger(0);
public Thread newThread(Runnable runnable) {
- Thread t = originalThreadFactory.newThread(runnable);
- t.setName(ExecutorThreadModel.this.threadNamePrefix + '-'
- + threadId.incrementAndGet());
+ Thread t = originalThreadFactory.newThread(
+ new NamePreservingRunnable(
+ runnable,
+ ExecutorThreadModel.this.threadNamePrefix + '-' +
+ threadId.incrementAndGet()));
t.setDaemon(true);
return t;
}
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketAcceptor.java Wed Oct 24 23:20:04 2007
@@ -162,7 +162,7 @@
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
}
}
@@ -214,8 +214,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName(SocketAcceptor.this.threadName);
-
Selector selector = SocketAcceptor.this.selector;
for (;;) {
try {
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketConnector.java Wed Oct 24 23:20:04 2007
@@ -232,7 +232,7 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
}
}
@@ -351,8 +351,6 @@
private long lastActive = System.currentTimeMillis();
public void run() {
- Thread.currentThread().setName(SocketConnector.this.threadName);
-
Selector selector = SocketConnector.this.selector;
for (;;) {
try {
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java Wed Oct 24 23:20:04 2007
@@ -82,7 +82,7 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
selector.wakeup();
}
@@ -453,8 +453,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName(SocketIoProcessor.this.threadName);
-
Selector selector = SocketIoProcessor.this.selector;
for (;;) {
try {
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java Wed Oct 24 23:20:04 2007
@@ -280,7 +280,8 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(
+ new NamePreservingRunnable(worker, "DatagramAcceptor-" + id));
}
}
}
@@ -308,8 +309,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName("DatagramAcceptor-" + id);
-
Selector selector = DatagramAcceptorDelegate.this.selector;
for (;;) {
try {
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Wed Oct 24 23:20:04 2007
@@ -200,7 +200,8 @@
if (worker == null) {
selector = Selector.open();
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(
+ new NamePreservingRunnable(worker, "DatagramConnector-" + id));
}
}
}
@@ -292,8 +293,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName("DatagramConnector-" + id);
-
Selector selector = DatagramConnectorDelegate.this.selector;
for (;;) {
try {
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java Wed Oct 24 23:20:04 2007
@@ -18,27 +18,54 @@
*/
package org.apache.mina.util;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
- * A Runnable wrapper that preserves the name of the thread after the runnable is complete (for Runnables
- * that change the name of the Thread they use)
+ * A {@link Runnable} wrapper that preserves the name of the thread after the runnable is
+ * complete (for {@link Runnable}s that change the name of the Thread they use.)
*
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
+ * @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev: 446581 $, $Date: 2006-09-15 11:36:12Z $,
*/
public class NamePreservingRunnable implements Runnable {
+ private final Logger logger = LoggerFactory.getLogger(NamePreservingRunnable.class);
+
+ private final String newName;
private final Runnable runnable;
- public NamePreservingRunnable(Runnable runnable) {
+ public NamePreservingRunnable(Runnable runnable, String newName) {
this.runnable = runnable;
+ this.newName = newName;
}
public void run() {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String oldName = currentThread.getName();
+
+ if (newName != null) {
+ setName(currentThread, newName);
+ }
try {
runnable.run();
} finally {
- Thread.currentThread().setName(name);
+ setName(currentThread, oldName);
+ }
+ }
+
+ /**
+ * Wraps {@link Thread#setName(String)} to catch a possible {@link Exception}s such as
+ * {@link SecurityException} in sandbox environments, such as applets
+ */
+ private void setName(Thread thread, String name) {
+ try {
+ thread.setName(name);
+ } catch (Exception e) {
+ // Probably SecurityException.
+ if (logger.isWarnEnabled()) {
+ logger.warn("Failed to set the thread name.", e);
+ }
}
}
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java Wed Oct 24 23:20:04 2007
@@ -158,7 +158,7 @@
synchronized (lock) {
if (worker == null) {
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
}
wakeup();
@@ -519,8 +519,6 @@
private class Worker implements Runnable {
public void run() {
int nSessions = 0;
-
- Thread.currentThread().setName(AbstractIoProcessor.this.threadName);
lastIdleCheckTime = System.currentTimeMillis();
for (;;) {
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioDatagramAcceptor.java Wed Oct 24 23:20:04 2007
@@ -32,11 +32,11 @@
import java.util.concurrent.Executor;
import org.apache.mina.common.AbstractIoAcceptor;
-import org.apache.mina.common.IoBuffer;
import org.apache.mina.common.ExceptionMonitor;
import org.apache.mina.common.ExpiringSessionRecycler;
import org.apache.mina.common.IdleStatusChecker;
import org.apache.mina.common.IoAcceptor;
+import org.apache.mina.common.IoBuffer;
import org.apache.mina.common.IoProcessor;
import org.apache.mina.common.IoServiceListenerSupport;
import org.apache.mina.common.IoSession;
@@ -256,7 +256,8 @@
private synchronized void startupWorker() {
if (worker == null) {
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(
+ new NamePreservingRunnable(worker, "DatagramAcceptor-" + id));
}
}
@@ -271,7 +272,6 @@
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName("DatagramAcceptor-" + id);
lastIdleCheckTime = System.currentTimeMillis();
for (; ;) {
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java Wed Oct 24 23:20:04 2007
@@ -259,7 +259,7 @@
if (worker == null) {
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
}
}
@@ -284,8 +284,6 @@
*/
private class Worker implements Runnable {
public void run() {
- Thread.currentThread().setName(NioSocketAcceptor.this.threadName);
-
for (; ;) {
try {
// gets the number of keys that are ready to go
Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java Wed Oct 24 23:20:04 2007
@@ -202,7 +202,7 @@
synchronized (lock) {
if (worker == null) {
worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
+ executor.execute(new NamePreservingRunnable(worker, threadName));
}
}
}
@@ -327,8 +327,6 @@
private long lastActive = System.currentTimeMillis();
public void run() {
- Thread.currentThread().setName(NioSocketConnector.this.threadName);
-
for (; ;) {
try {
int nKeys = selector.select(1000);
Modified: mina/trunk/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java?rev=588150&r1=588149&r2=588150&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/util/NamePreservingRunnable.java Wed Oct 24 23:20:04 2007
@@ -18,27 +18,54 @@
*/
package org.apache.mina.util;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
- * A Runnable wrapper that preserves the name of the thread after the runnable is complete (for Runnables
- * that change the name of the Thread they use)
- *
+ * A {@link Runnable} wrapper that preserves the name of the thread after the runnable is
+ * complete (for {@link Runnable}s that change the name of the Thread they use.)
+ *
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev: 446581 $, $Date: 2006-09-15 11:36:12Z $,
*/
public class NamePreservingRunnable implements Runnable {
+ private final Logger logger = LoggerFactory.getLogger(NamePreservingRunnable.class);
+
+ private final String newName;
private final Runnable runnable;
- public NamePreservingRunnable(Runnable runnable) {
+ public NamePreservingRunnable(Runnable runnable, String newName) {
this.runnable = runnable;
+ this.newName = newName;
}
public void run() {
- String name = Thread.currentThread().getName();
+ Thread currentThread = Thread.currentThread();
+ String oldName = currentThread.getName();
+
+ if (newName != null) {
+ setName(currentThread, newName);
+ }
try {
runnable.run();
} finally {
- Thread.currentThread().setName(name);
+ setName(currentThread, oldName);
+ }
+ }
+
+ /**
+ * Wraps {@link Thread#setName(String)} to catch a possible {@link Exception}s such as
+ * {@link SecurityException} in sandbox environments, such as applets
+ */
+ private void setName(Thread thread, String name) {
+ try {
+ thread.setName(name);
+ } catch (Exception e) {
+ // Probably SecurityException.
+ if (logger.isWarnEnabled()) {
+ logger.warn("Failed to set the thread name.", e);
+ }
}
}
}