Author: gnodet Date: Mon Oct 23 11:46:28 2017 New Revision: 1812997 URL: http://svn.apache.org/viewvc?rev=1812997&view=rev Log: [FELIX-5726] Thread create by gogo should be named
Added: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/ThreadUtils.java Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java?rev=1812997&r1=1812996&r2=1812997&view=diff ============================================================================== --- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java (original) +++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java Mon Oct 23 11:46:28 2017 @@ -90,7 +90,7 @@ public class CommandSessionImpl implemen protected CommandSessionImpl(CommandProcessorImpl shell, CommandSessionImpl parent) { this.currentDir = parent.currentDir; - this.executor = Executors.newCachedThreadPool(); + this.executor = Executors.newCachedThreadPool(ThreadUtils.namedThreadFactory("session")); this.processor = shell; this.channels = parent.channels; this.in = parent.in; Added: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/ThreadUtils.java URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/ThreadUtils.java?rev=1812997&view=auto ============================================================================== --- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/ThreadUtils.java (added) +++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/ThreadUtils.java Mon Oct 23 11:46:28 2017 @@ -0,0 +1,58 @@ +/* + * 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. + */ +package org.apache.felix.gogo.runtime; + +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; + +public class ThreadUtils { + + /** + * Constructs threads with names <code><prefix>-<pool number>-thread-<thread number></code>. + * @param prefix prefix to be used for thread names created by this {@link ThreadFactory} + * @return + */ + public static ThreadFactory namedThreadFactory(String prefix) { + return new NamedThreadFactory(prefix); + } + + private static class NamedThreadFactory implements ThreadFactory { + + private static final AtomicInteger poolNumber = new AtomicInteger(1); + private final ThreadGroup group; + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final String namePrefix; + + public NamedThreadFactory(String prefix) { + SecurityManager s = System.getSecurityManager(); + group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); + namePrefix = prefix + "-" + poolNumber.getAndIncrement() + "-thread-"; + } + + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0); + if (t.isDaemon()) + t.setDaemon(false); + if (t.getPriority() != Thread.NORM_PRIORITY) + t.setPriority(Thread.NORM_PRIORITY); + return t; + } + + } + +}