You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2012/11/30 11:48:06 UTC

git commit: o Fixed another super-subtle classloader leak

Updated Branches:
  refs/heads/master 9712df3de -> a278bec9d


o Fixed another super-subtle classloader leak


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/a278bec9
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/a278bec9
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/a278bec9

Branch: refs/heads/master
Commit: a278bec9d3238136beed50b658a7a0aa6b4b110a
Parents: 9712df3
Author: Kristian Rosenvold <kr...@apache.org>
Authored: Thu Nov 29 18:45:00 2012 +0100
Committer: Kristian Rosenvold <kr...@apache.org>
Committed: Fri Nov 30 11:46:23 2012 +0100

----------------------------------------------------------------------
 .../plugin/internal/DefaultLegacySupport.java      |   15 ++--
 .../plugin/internal/DefaultLegacySupportTest.java  |   74 +++++++++++++++
 2 files changed, 82 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/a278bec9/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
index 53e5f30..78790d7 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
@@ -43,14 +43,15 @@ public class DefaultLegacySupport
 
     public void setSession( MavenSession session )
     {
-        if ( session == null )
+        AtomicReference<MavenSession> reference = DefaultLegacySupport.session.get();
+        if ( reference != null )
         {
-            AtomicReference<MavenSession> oldSession = DefaultLegacySupport.session.get();
-            if ( oldSession != null )
-            {
-                oldSession.set( null);
-                DefaultLegacySupport.session.remove();
-            }
+            reference.set( null);
+        }
+
+        if ( session == null && reference != null)
+        {
+            DefaultLegacySupport.session.remove();
         }
         else
         {

http://git-wip-us.apache.org/repos/asf/maven/blob/a278bec9/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
----------------------------------------------------------------------
diff --git a/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java b/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
new file mode 100644
index 0000000..d350770
--- /dev/null
+++ b/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
@@ -0,0 +1,74 @@
+package org.apache.maven.plugin.internal;
+/*
+ * 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.
+ */
+
+import junit.framework.TestCase;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+
+import java.util.concurrent.CountDownLatch;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class DefaultLegacySupportTest extends TestCase {
+    final CountDownLatch latch = new CountDownLatch(1);
+    final DefaultLegacySupport defaultLegacySupport = new DefaultLegacySupport();
+
+    public void testSetSession() throws Exception {
+
+        MavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
+        MavenSession m1 = new MavenSession(null, null, mavenExecutionRequest, null);
+        defaultLegacySupport.setSession(m1);
+
+        MyRunnable myRunnable = new MyRunnable();
+        Thread thread = new Thread(myRunnable);
+        thread.start();
+
+        MavenSession m2 = new MavenSession(null, null, mavenExecutionRequest, null);
+        defaultLegacySupport.setSession(m2);
+        latch.countDown();
+        thread.join();
+        assertNull( myRunnable.getSession());
+    }
+
+
+    class MyRunnable implements Runnable {
+
+        private volatile MavenSession session;
+
+        public void run() {
+            try
+            {
+                latch.await();
+            }
+            catch (InterruptedException ingore)
+            {
+                // Test may fail if we get interrupted
+            }
+            session = defaultLegacySupport.getSession();
+        }
+
+        public MavenSession getSession() {
+            return session;
+        }
+    }
+
+}