Index: src/org/jruby/runtime/ThreadContext.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/runtime/ThreadContext.java,v
retrieving revision 1.73
diff -u -r1.73 ThreadContext.java
--- src/org/jruby/runtime/ThreadContext.java	21 Dec 2005 14:30:34 -0000	1.73
+++ src/org/jruby/runtime/ThreadContext.java	23 Jan 2006 06:11:52 -0000
@@ -53,6 +53,7 @@
 import org.jruby.lexer.yacc.ISourcePosition;
 import org.jruby.lexer.yacc.SourcePositionFactory;
 import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.util.UnsynchronizedStack;
 
 /**
  * @author jpetersen
@@ -61,15 +62,15 @@
     private final IRuby runtime;
 
     private BlockStack blockStack;
-    private Stack dynamicVarsStack;
+    private UnsynchronizedStack dynamicVarsStack;
 
     private RubyThread thread;
     
-    private Stack parentStack;
+    private UnsynchronizedStack parentStack;
 	
     private ScopeStack scopeStack;
-    private Stack frameStack;
-    private Stack iterStack;
+    private UnsynchronizedStack frameStack;
+    private UnsynchronizedStack iterStack;
 
     private RubyModule wrapper;
 
@@ -82,11 +83,11 @@
         this.runtime = runtime;
 
         this.blockStack = new BlockStack();
-        this.dynamicVarsStack = new Stack();
         this.scopeStack = new ScopeStack();
-        this.frameStack = new Stack();
-        this.iterStack = new Stack();
-        this.parentStack = new Stack();
+        this.dynamicVarsStack = new UnsynchronizedStack();
+        this.frameStack = new UnsynchronizedStack();
+        this.iterStack = new UnsynchronizedStack();
+        this.parentStack = new UnsynchronizedStack();
 
         pushDynamicVars();
     }
@@ -200,7 +201,7 @@
     
     public Frame getPreviousFrame() {
         int size = frameStack.size();
-        return size <= 1 ? null : (Frame) frameStack.elementAt(size - 2);
+        return size <= 1 ? null : (Frame) frameStack.get(size - 2);
     }
     
     public Iter popIter() {
@@ -512,11 +513,11 @@
         
         if (nativeException) {
             // assert level == 0;
-            addBackTraceElement(backtrace, (Frame) frameStack.elementAt(frameStack.size() - 1), null);
+            addBackTraceElement(backtrace, (Frame) frameStack.get(frameStack.size() - 1), null);
         }
         
         for (int i = traceSize; i > 0; i--) {
-            addBackTraceElement(backtrace, (Frame) frameStack.elementAt(i), (Frame) frameStack.elementAt(i-1));
+            addBackTraceElement(backtrace, (Frame) frameStack.get(i), (Frame) frameStack.get(i-1));
         }
     
         return backtrace;
Index: src/org/jruby/util/UnsynchronizedStack.java
===================================================================
RCS file: src/org/jruby/util/UnsynchronizedStack.java
diff -N src/org/jruby/util/UnsynchronizedStack.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/jruby/util/UnsynchronizedStack.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,32 @@
+package org.jruby.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class UnsynchronizedStack extends ArrayList {
+    private static final long serialVersionUID = 5627466606696890874L;
+
+    public UnsynchronizedStack() {
+        super();
+    }
+
+    public UnsynchronizedStack(int initialCapacity) {
+        super(initialCapacity);
+    }
+
+    public UnsynchronizedStack(Collection c) {
+        super(c);
+    }
+
+    public void push(Object o) {
+        add(o);
+    }
+    
+    public Object peek() {
+        return get(size() - 1);
+    }
+    
+    public Object pop() {
+        return remove(size() - 1);
+    }
+}
