From: aclement Date: Tue, 27 May 2008 18:46:58 +0000 (+0000) Subject: 210470: preventing weaver leaks: do not mess up the context stack in a multi-threaded... X-Git-Tag: V1_6_1x~20 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d78772db596a4169095d26ab6e13cf92fda0dde0;p=aspectj.git 210470: preventing weaver leaks: do not mess up the context stack in a multi-threaded environment --- diff --git a/bridge/src/org/aspectj/bridge/context/CompilationAndWeavingContext.java b/bridge/src/org/aspectj/bridge/context/CompilationAndWeavingContext.java index 9f546b131..c9acc4967 100644 --- a/bridge/src/org/aspectj/bridge/context/CompilationAndWeavingContext.java +++ b/bridge/src/org/aspectj/bridge/context/CompilationAndWeavingContext.java @@ -136,12 +136,17 @@ public class CompilationAndWeavingContext { private CompilationAndWeavingContext() { } - // for testing... public static void reset() { - contextMap = new HashMap(); - contextStack = new Stack(); - formatterMap = new HashMap(); - nextTokenId = 1; + if (!multiThreaded) { + contextMap = new HashMap(); + contextStack = new Stack(); + formatterMap = new HashMap(); + nextTokenId = 1; + } else { + contextMap.remove(Thread.currentThread()); + // TODO what about formatterMap? + // TODO what about nextTokenId? + } } public static void setMultiThreaded(boolean mt) { multiThreaded = mt; } @@ -204,13 +209,12 @@ public class CompilationAndWeavingContext { return contextStack; } else { - if (contextMap.containsKey(Thread.currentThread())) { - return (Stack) contextMap.get(Thread.currentThread()); - } else { - Stack contextStack = new Stack(); + Stack contextStack = (Stack) contextMap.get(Thread.currentThread()); + if (contextStack == null) { + contextStack = new Stack(); contextMap.put(Thread.currentThread(),contextStack); - return contextStack; } + return contextStack; } }