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;
+ }
+ }
+
+}