From: <pj...@us...> - 2011-02-08 01:17:00
|
Revision: 7195 http://jython.svn.sourceforge.net/jython/?rev=7195&view=rev Author: pjenvey Date: 2011-02-08 01:16:53 +0000 (Tue, 08 Feb 2011) Log Message: ----------- cleanup generics around PySystemStateCloser, PySystemState.unregisterCloser doesn't need synchronization Modified Paths: -------------- trunk/jython/src/org/python/core/PyFile.java trunk/jython/src/org/python/core/PySystemState.java Modified: trunk/jython/src/org/python/core/PyFile.java =================================================================== --- trunk/jython/src/org/python/core/PyFile.java 2011-02-05 01:23:12 UTC (rev 7194) +++ trunk/jython/src/org/python/core/PyFile.java 2011-02-08 01:16:53 UTC (rev 7195) @@ -574,7 +574,7 @@ * be called during shutdown, so we can't use it. It's vital that this Closer has no * reference to the PyFile it's closing so the PyFile remains garbage collectable. */ - private static class Closer implements Callable { + private static class Closer implements Callable<Void> { /** * The underlying file @@ -588,8 +588,7 @@ sys.registerCloser(this); } - // For closing directly - + /** For closing directly */ public void close() { if (sys.unregisterCloser(this)) { file.close(); @@ -597,9 +596,8 @@ sys = null; } - // For closing as part of a shutdown process - - public Object call() { + /** For closing as part of a shutdown process */ + public Void call() { file.close(); sys = null; return null; Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2011-02-05 01:23:12 UTC (rev 7194) +++ trunk/jython/src/org/python/core/PySystemState.java 2011-02-08 01:16:53 UTC (rev 7195) @@ -155,8 +155,10 @@ // Automatically close resources associated with a PySystemState when they get GCed private final PySystemStateCloser closer; - private static final ReferenceQueue systemStateQueue = new ReferenceQueue<PySystemState>(); - private static final ConcurrentMap<WeakReference<PySystemState>, PySystemStateCloser> sysClosers = Generic.concurrentMap(); + private static final ReferenceQueue<PySystemState> systemStateQueue = + new ReferenceQueue<PySystemState>(); + private static final ConcurrentMap<WeakReference<PySystemState>, + PySystemStateCloser> sysClosers = Generic.concurrentMap(); public PySystemState() { initialize(); @@ -1286,11 +1288,11 @@ return f; } - public void registerCloser(Callable resourceCloser) { + public void registerCloser(Callable<Void> resourceCloser) { closer.registerCloser(resourceCloser); } - public synchronized boolean unregisterCloser(Callable resourceCloser) { + public boolean unregisterCloser(Callable<Void> resourceCloser) { return closer.unregisterCloser(resourceCloser); } @@ -1300,32 +1302,33 @@ private static class PySystemStateCloser { - private final Set<Callable> resourceClosers = new LinkedHashSet<Callable>(); + private final Set<Callable<Void>> resourceClosers = new LinkedHashSet<Callable<Void>>(); private volatile boolean isCleanup = false; private final Thread shutdownHook; private PySystemStateCloser(PySystemState sys) { shutdownHook = initShutdownCloser(); - WeakReference<PySystemState> ref = new WeakReference(sys, systemStateQueue); + WeakReference<PySystemState> ref = + new WeakReference<PySystemState>(sys, systemStateQueue); sysClosers.put(ref, this); cleanupOtherClosers(); } private static void cleanupOtherClosers() { - Reference<PySystemStateCloser> ref; + Reference<? extends PySystemState> ref; while ((ref = systemStateQueue.poll()) != null) { PySystemStateCloser closer = sysClosers.get(ref); closer.cleanup(); } } - private synchronized void registerCloser(Callable closer) { + private synchronized void registerCloser(Callable<Void> closer) { if (!isCleanup) { resourceClosers.add(closer); } } - private synchronized boolean unregisterCloser(Callable closer) { + private synchronized boolean unregisterCloser(Callable<Void> closer) { return resourceClosers.remove(closer); } @@ -1335,7 +1338,8 @@ } isCleanup = true; - // close this thread so we can unload any associated classloaders in cycle with this instance + // close this thread so we can unload any associated classloaders in cycle + // with this instance if (shutdownHook != null) { try { Runtime.getRuntime().removeShutdownHook(shutdownHook); @@ -1344,7 +1348,7 @@ } } - for (Callable callable : resourceClosers) { + for (Callable<Void> callable : resourceClosers) { try { callable.call(); } catch (Exception e) { @@ -1378,7 +1382,7 @@ // resourceClosers can be null in some strange cases return; } - for (Callable callable : resourceClosers) { + for (Callable<Void> callable : resourceClosers) { try { callable.call(); // side effect of being removed from this set } catch (Exception e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |