Return-Path: Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: (qmail 24654 invoked from network); 1 Oct 2010 16:32:54 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 1 Oct 2010 16:32:54 -0000 Received: (qmail 53448 invoked by uid 500); 1 Oct 2010 16:32:53 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 53332 invoked by uid 500); 1 Oct 2010 16:32:53 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 53321 invoked by uid 99); 1 Oct 2010 16:32:52 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Oct 2010 16:32:52 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 01 Oct 2010 16:32:52 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id D8CD2238890B; Fri, 1 Oct 2010 16:32:31 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1003572 - in /tomcat/trunk/java/org/apache/catalina/tribes: group/interceptors/MessageDispatch15Interceptor.java util/TcclThreadFactory.java Date: Fri, 01 Oct 2010 16:32:31 -0000 To: dev@tomcat.apache.org From: markt@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101001163231.D8CD2238890B@eris.apache.org> Author: markt Date: Fri Oct 1 16:32:31 2010 New Revision: 1003572 URL: http://svn.apache.org/viewvc?rev=1003572&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49905 Prevent memory leak when using aysnc session replication Added: tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java (with props) Modified: tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java Modified: tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java?rev=1003572&r1=1003571&r2=1003572&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java (original) +++ tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java Fri Oct 1 16:32:31 2010 @@ -24,6 +24,7 @@ import org.apache.catalina.tribes.Channe import org.apache.catalina.tribes.Member; import org.apache.catalina.tribes.group.InterceptorPayload; import org.apache.catalina.tribes.transport.bio.util.LinkObject; +import org.apache.catalina.tribes.util.TcclThreadFactory; /** * @@ -80,7 +81,9 @@ public class MessageDispatch15Intercepto @Override public void startQueue() { if ( run ) return; - executor = new ThreadPoolExecutor(maxSpareThreads,maxThreads,keepAliveTime,TimeUnit.MILLISECONDS,runnablequeue); + executor = new ThreadPoolExecutor(maxSpareThreads, maxThreads, + keepAliveTime, TimeUnit.MILLISECONDS, runnablequeue, + new TcclThreadFactory()); run = true; } Added: tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java?rev=1003572&view=auto ============================================================================== --- tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java (added) +++ tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java Fri Oct 1 16:32:31 2010 @@ -0,0 +1,66 @@ +/* + * 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.catalina.tribes.util; + +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * ThreadFactory implementation that creates threads with the thread context + * class loader set to the class loader that loaded this factory. It is intended + * to be used when tasks may be passed to executors when the web application + * class loader is set as the thread context class loader, such as in async + * session replication. + */ +public class TcclThreadFactory implements ThreadFactory { + + private static final AtomicInteger poolNumber = new AtomicInteger(1); + private static final boolean IS_SECURITY_ENABLED = + (System.getSecurityManager() != null); + + private final ThreadGroup group; + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final String namePrefix; + + public TcclThreadFactory() { + SecurityManager s = System.getSecurityManager(); + group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); + namePrefix = "pool-" + poolNumber.getAndIncrement() + "-thread-"; + } + + @Override + public Thread newThread(Runnable r) { + final Thread t = new Thread(group, r, namePrefix + + threadNumber.getAndIncrement()); + + if (IS_SECURITY_ENABLED) { + AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Void run() { + t.setContextClassLoader(this.getClass().getClassLoader()); + return null; + } + }); + } else { + t.setContextClassLoader(this.getClass().getClassLoader()); + } + return t; + } + +} Propchange: tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org