SF.net SVN: jython:[7120] trunk/jython

[email protected] Sun, 12 Sep 2010 23:08:19 +0000
Newsgroups gmane.comp.lang.jython.cvs
Message-ID <[email protected]>
Revision: 7120
          http://jython.svn.sourceforge.net/jython/?rev=7120&view=rev
Author:   zyasoft
Date:     2010-09-12 23:08:19 +0000 (Sun, 12 Sep 2010)

Log Message:
-----------
Backed out support for nulling out ThreadState support. We need a
better solution that doesn't introduce synchronization issues and a
backwards breaking API change. See the discussion in #1327.

Modified Paths:
--------------
    trunk/jython/src/org/python/core/PySystemState.java
    trunk/jython/src/org/python/core/ThreadStateMapping.java
    trunk/jython/tests/java/org/python/core/WrappedBooleanTest.java
    trunk/jython/tests/java/org/python/core/WrappedFloatTest.java
    trunk/jython/tests/java/org/python/core/WrappedIntegerTest.java
    trunk/jython/tests/java/org/python/core/WrappedLongTest.java
    trunk/jython/tests/java/org/python/tests/ExceptionTest.java
    trunk/jython/tests/java/org/python/tests/SerializationTest.java
    trunk/jython/tests/java/org/python/tests/props/BeanPropertyTest.java

Modified: trunk/jython/src/org/python/core/PySystemState.java
===================================================================
--- trunk/jython/src/org/python/core/PySystemState.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/src/org/python/core/PySystemState.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -1244,10 +1244,6 @@
         return f;
     }
 
-    public void registerThreadState(ThreadState[] threadLocal, ThreadState ts) {
-        closer.registerThreadState(threadLocal, ts);
-    }
-
     public void registerCloser(Callable resourceCloser) {
         closer.registerCloser(resourceCloser);
     }
@@ -1281,7 +1277,6 @@
 
     private static class PySystemStateCloser {
 
-        private final ArrayList<WeakReference<ThreadState[]>> threadStateList = new ArrayList<WeakReference<ThreadState[]>>();
         private final Set<Callable> resourceClosers = new LinkedHashSet<Callable>();
         private volatile boolean isCleanup = false;
         private final Thread shutdownHook;
@@ -1301,13 +1296,6 @@
             }
         }
 
-        private synchronized void registerThreadState(ThreadState[] threadLocal, ThreadState ts) {
-            if (!isCleanup) {
-                threadLocal[0] = ts;
-                threadStateList.add(new WeakReference<ThreadState[]>(threadLocal));
-            }
-        }
-
         private synchronized void registerCloser(Callable closer) {
             if (!isCleanup) {
                 resourceClosers.add(closer);
@@ -1329,15 +1317,6 @@
                 Runtime.getRuntime().removeShutdownHook(shutdownHook);
             }
 
-            // clear out existing ThreadStates so that they can be GCed - this resolves ClassLoader issues
-            for (WeakReference<ThreadState[]> ref : threadStateList) {
-                ThreadState[] o = ref.get();
-                if (o != null) {
-                    o[0] = null;
-                }
-            }
-            threadStateList.clear();
-
             for (Callable callable : resourceClosers) {
                 try {
                     callable.call();

Modified: trunk/jython/src/org/python/core/ThreadStateMapping.java
===================================================================
--- trunk/jython/src/org/python/core/ThreadStateMapping.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/src/org/python/core/ThreadStateMapping.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -1,19 +1,15 @@
 package org.python.core;
 
 class ThreadStateMapping {
-    private static final ThreadLocal<ThreadState[]> cachedThreadState =
-            new ThreadLocal<ThreadState[]>() {
-                @Override
-                protected ThreadState[] initialValue() {
-                    return new ThreadState[1];
-                }
-            };
+    private static final ThreadLocal<ThreadState> cachedThreadState = new ThreadLocal<ThreadState>();
 
-    public synchronized ThreadState getThreadState(PySystemState newSystemState) {
-        ThreadState[] threadLocal = cachedThreadState.get();
-        if (threadLocal[0] != null)
-            return threadLocal[0];
+    public ThreadState getThreadState(PySystemState newSystemState) {
+        ThreadState ts = cachedThreadState.get();
+        if (ts != null) {
+            return ts;
+        }
 
+
         Thread t = Thread.currentThread();
         if (newSystemState == null) {
             Py.writeDebug("threadstate", "no current system state");
@@ -23,8 +19,8 @@
             newSystemState = Py.defaultSystemState;
         }
 
-        ThreadState ts = new ThreadState(t, newSystemState);
-        newSystemState.registerThreadState(threadLocal, ts);
+        ts = new ThreadState(t, newSystemState);
+        cachedThreadState.set(ts);
         return ts;
     }
 }

Modified: trunk/jython/tests/java/org/python/core/WrappedBooleanTest.java
===================================================================
--- trunk/jython/tests/java/org/python/core/WrappedBooleanTest.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/tests/java/org/python/core/WrappedBooleanTest.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -32,7 +32,6 @@
 
     @Override
     protected void setUp() throws Exception {
-        PythonInterpreter.initialize(null, null, null);
         interp = new PythonInterpreter(new PyStringMap(), new PySystemState());
         a = new WrappedBoolean();
         b = new WrappedBoolean();

Modified: trunk/jython/tests/java/org/python/core/WrappedFloatTest.java
===================================================================
--- trunk/jython/tests/java/org/python/core/WrappedFloatTest.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/tests/java/org/python/core/WrappedFloatTest.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -32,7 +32,6 @@
 
     @Override
     protected void setUp() throws Exception {
-        PythonInterpreter.initialize(null, null, null);
         interp = new PythonInterpreter(new PyStringMap(), new PySystemState());
         a = new WrappedFloat();
         b = new WrappedFloat();

Modified: trunk/jython/tests/java/org/python/core/WrappedIntegerTest.java
===================================================================
--- trunk/jython/tests/java/org/python/core/WrappedIntegerTest.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/tests/java/org/python/core/WrappedIntegerTest.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -32,7 +32,6 @@
 
     @Override
     protected void setUp() throws Exception {
-        PythonInterpreter.initialize(null, null, null);
         interp = new PythonInterpreter(new PyStringMap(), new PySystemState());
         a = new WrappedInteger();
         b = new WrappedInteger();

Modified: trunk/jython/tests/java/org/python/core/WrappedLongTest.java
===================================================================
--- trunk/jython/tests/java/org/python/core/WrappedLongTest.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/tests/java/org/python/core/WrappedLongTest.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -34,7 +34,6 @@
 
     @Override
     protected void setUp() throws Exception {
-        PythonInterpreter.initialize(null, null, null);
         interp = new PythonInterpreter(new PyStringMap(), new PySystemState());
         a = new WrappedLong();
         b = new WrappedLong();

Modified: trunk/jython/tests/java/org/python/tests/ExceptionTest.java
===================================================================
--- trunk/jython/tests/java/org/python/tests/ExceptionTest.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/tests/java/org/python/tests/ExceptionTest.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -28,7 +28,6 @@
             "         else:\n" +
             "             raise Throwable()\n" +
             "r = Raiser()";
-        PythonInterpreter.initialize(null, null, null);
         PythonInterpreter interp = new PythonInterpreter();
         interp.exec(raiser);
         t = Py.tojava(interp.get("r"), Thrower.class);

Modified: trunk/jython/tests/java/org/python/tests/SerializationTest.java
===================================================================
--- trunk/jython/tests/java/org/python/tests/SerializationTest.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/tests/java/org/python/tests/SerializationTest.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -18,7 +18,6 @@
 
     @Override
     protected void setUp() throws Exception {
-        PythonInterpreter.initialize(null, null, null);
         interp = new PythonInterpreter(new PyStringMap(), new PySystemState());
         interp.exec("from java.io import Serializable");
         interp.exec("class Test(Serializable): pass");

Modified: trunk/jython/tests/java/org/python/tests/props/BeanPropertyTest.java
===================================================================
--- trunk/jython/tests/java/org/python/tests/props/BeanPropertyTest.java	2010-09-12 23:04:58 UTC (rev 7119)
+++ trunk/jython/tests/java/org/python/tests/props/BeanPropertyTest.java	2010-09-12 23:08:19 UTC (rev 7120)
@@ -12,7 +12,6 @@
 
     @Override
     protected void setUp() throws Exception {
-        PythonInterpreter.initialize(null, null, null);
         interp = new PythonInterpreter(new PyStringMap(), new PySystemState());
     }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing
http://p.sf.net/sfu/novell-sfdev2dev