]> source.dussan.org Git - aspectj.git/commitdiff
Cleaning up thread locals when counters/stacks hit zero
authorAndy Clement <andrew.clement@gmail.com>
Fri, 22 Mar 2013 22:08:25 +0000 (15:08 -0700)
committerAndy Clement <andrew.clement@gmail.com>
Fri, 22 Mar 2013 22:08:25 +0000 (15:08 -0700)
runtime/src/org/aspectj/runtime/internal/CFlowCounter.java
runtime/src/org/aspectj/runtime/internal/CFlowStack.java
runtime/src/org/aspectj/runtime/internal/cflowstack/ThreadCounter.java
runtime/src/org/aspectj/runtime/internal/cflowstack/ThreadCounterImpl11.java
runtime/src/org/aspectj/runtime/internal/cflowstack/ThreadStack.java
runtime/src/org/aspectj/runtime/internal/cflowstack/ThreadStackFactoryImpl.java
runtime/src/org/aspectj/runtime/internal/cflowstack/ThreadStackImpl11.java

index 8bda3ed39dc5798b92f7326d6fd4760d6fe00702..633458195b8cb6cfca0d9976ce64b8299aca5700 100644 (file)
@@ -39,6 +39,9 @@ public class CFlowCounter {
 
     public void dec() {
        flowHeightHandler.dec();
+       if (!flowHeightHandler.isNotZero()) {
+               flowHeightHandler.removeThreadCounter();
+       }
     }
     
     public boolean isValid() {
index 1bb0d5d1d1bb41e6cf92ef844a22a863605d6b64..48308f145090c52695695d696e348bbde552cc16 100644 (file)
@@ -81,7 +81,11 @@ public class CFlowStack {
     }
 
     public void pop() {
-        getThreadStack().pop();
+        Stack s = getThreadStack();
+        s.pop();
+        if (s.isEmpty()) {
+               stackProxy.removeThreadStack();
+        }
     }
 
     public Object peek() {
index 79f96a6a324fa64de640472f99371569f32d672f..1fa064ceeab76248a8a036a252989f0848e2fe7d 100644 (file)
@@ -18,4 +18,5 @@ public interface ThreadCounter {
          public void          inc();
          public void          dec();
          public boolean isNotZero();
+         public void removeThreadCounter();
 }
\ No newline at end of file
index 174e5525535e711cc4327c1f7595478ad1948277..71aaacd62e3c7e8d5720039de987582c9460aa56 100644 (file)
@@ -71,4 +71,8 @@ public class ThreadCounterImpl11 implements ThreadCounter {
                return getThreadCounter().value!=0;
        }
 
+       public void removeThreadCounter() {
+               // TODO 
+       }
+
 }
index b211e1d3ed78efaf49eef2885c85edd94f59ef66..7290163d2e6a792a5d6967f9848d674ee5382244 100644 (file)
@@ -18,5 +18,6 @@ import java.util.Stack;
 public interface ThreadStack {
 
        public Stack getThreadStack();
+       public void removeThreadStack();
 
 }
index da7437710290fb158d177b57eb3e29a233b2ea52..2437f06b0930cb7bf59f846284b353c68dc03ae1 100644 (file)
@@ -23,6 +23,9 @@ public class ThreadStackFactoryImpl implements ThreadStackFactory {
                public Stack getThreadStack() {
                        return (Stack)get();
                }
+               public void removeThreadStack() {
+                       this.remove();
+               }
        }
 
        public ThreadStack getNewThreadStack() {
@@ -38,6 +41,10 @@ public class ThreadStackFactoryImpl implements ThreadStackFactory {
                        return (Counter)get();
                }
                
+               public void removeThreadCounter() {
+                       this.remove();
+               }
+               
                public void inc() { getThreadCounter().value++; }
                public void dec() { getThreadCounter().value--; }
                public boolean isNotZero() { return getThreadCounter().value!= 0; }
index af43f5f3d1b7bf8b9d5a5c97e43da8aeca5ed691..51f09cadddacf643a6457b66a921cb03c18965bf 100644 (file)
@@ -52,4 +52,8 @@ public class ThreadStackImpl11 implements ThreadStack {
                return cached_stack;
        }
 
+       public void removeThreadStack() {
+               // TODO
+       }
+
 }