From 1f9bc3be8ae7d6ded9bae8fd902fef6bff90f651 Mon Sep 17 00:00:00 2001 From: Michi Henning Date: Tue, 26 Apr 2005 04:56:19 +0000 Subject: Made finalizers thread-safe. --- java/src/Ice/CommunicatorI.java | 2 +- java/src/Ice/ObjectAdapterI.java | 2 +- java/src/Ice/_ObjectDelM.java | 17 ++++++----- java/src/IceInternal/ConnectionMonitor.java | 2 +- java/src/IceInternal/EventHandler.java | 7 +++-- java/src/IceInternal/IncomingBase.java | 17 ++++++----- .../src/IceInternal/IncomingConnectionFactory.java | 13 +++++---- java/src/IceInternal/Instance.java | 2 +- java/src/IceInternal/ObjectAdapterFactory.java | 2 +- .../src/IceInternal/OutgoingConnectionFactory.java | 2 +- java/src/IceInternal/TcpAcceptor.java | 10 +++++-- java/src/IceInternal/TcpTransceiver.java | 33 +++++++++++++--------- java/src/IceInternal/ThreadPool.java | 3 +- java/src/IceInternal/UdpTransceiver.java | 4 +-- java/src/IceSSL/SslAcceptor.java | 8 ++++-- java/src/IceSSL/SslConnector.java | 2 +- java/src/IceSSL/SslTransceiver.java | 29 +++++++++++-------- java/src/IceUtil/Version.java | 4 +-- 18 files changed, 94 insertions(+), 65 deletions(-) (limited to 'java/src') diff --git a/java/src/Ice/CommunicatorI.java b/java/src/Ice/CommunicatorI.java index b72d3144546..0e027e6844b 100644 --- a/java/src/Ice/CommunicatorI.java +++ b/java/src/Ice/CommunicatorI.java @@ -272,7 +272,7 @@ public final class CommunicatorI extends LocalObjectImpl implements Communicator _instance = new IceInternal.Instance(this, properties); } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/Ice/ObjectAdapterI.java b/java/src/Ice/ObjectAdapterI.java index 5b644219ab8..7d9e4b4e57b 100644 --- a/java/src/Ice/ObjectAdapterI.java +++ b/java/src/Ice/ObjectAdapterI.java @@ -729,7 +729,7 @@ public final class ObjectAdapterI extends LocalObjectImpl implements ObjectAdapt } } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/Ice/_ObjectDelM.java b/java/src/Ice/_ObjectDelM.java index 26c44951351..718183e7c79 100644 --- a/java/src/Ice/_ObjectDelM.java +++ b/java/src/Ice/_ObjectDelM.java @@ -237,13 +237,16 @@ public class _ObjectDelM implements _ObjectDel finalize() throws Throwable { - while(__outgoingCache != null) - { - IceInternal.Outgoing next = __outgoingCache.next; - __outgoingCache.destroy(); - __outgoingCache.next = null; - __outgoingCache = next; - } + synchronized(__outgoingMutex) + { + while(__outgoingCache != null) + { + IceInternal.Outgoing next = __outgoingCache.next; + __outgoingCache.destroy(); + __outgoingCache.next = null; + __outgoingCache = next; + } + } } private IceInternal.Outgoing __outgoingCache; diff --git a/java/src/IceInternal/ConnectionMonitor.java b/java/src/IceInternal/ConnectionMonitor.java index 0c36221c2b4..6dac428bf03 100644 --- a/java/src/IceInternal/ConnectionMonitor.java +++ b/java/src/IceInternal/ConnectionMonitor.java @@ -75,7 +75,7 @@ public final class ConnectionMonitor extends Thread start(); } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceInternal/EventHandler.java b/java/src/IceInternal/EventHandler.java index 8f2227ddd7b..66699da36dd 100644 --- a/java/src/IceInternal/EventHandler.java +++ b/java/src/IceInternal/EventHandler.java @@ -58,8 +58,11 @@ public abstract class EventHandler public void destroy() { - _stream.destroy(); - _stream = null; + synchronized(this) + { + _stream.destroy(); + _stream = null; + } } protected diff --git a/java/src/IceInternal/IncomingBase.java b/java/src/IceInternal/IncomingBase.java index 0551a37c388..40a6ca1968e 100644 --- a/java/src/IceInternal/IncomingBase.java +++ b/java/src/IceInternal/IncomingBase.java @@ -62,7 +62,7 @@ public class IncomingBase // penalty! We must make sure that __destroy() is called instead, // to reclaim resources. // - public void + public synchronized void __destroy() { if(_os != null) @@ -103,13 +103,16 @@ public class IncomingBase _compress = compress; - if(_os == null) - { - _os = new BasicStream(instance); - } - else + synchronized(this) { - _os.reset(); + if(_os == null) + { + _os = new BasicStream(instance); + } + else + { + _os.reset(); + } } _connection = connection; diff --git a/java/src/IceInternal/IncomingConnectionFactory.java b/java/src/IceInternal/IncomingConnectionFactory.java index 60911ecf5aa..34e0d2bc487 100644 --- a/java/src/IceInternal/IncomingConnectionFactory.java +++ b/java/src/IceInternal/IncomingConnectionFactory.java @@ -448,11 +448,14 @@ public final class IncomingConnectionFactory extends EventHandler // // Clean up for finalizer. // - _state = StateClosed; - _acceptor = null; - _connections = null; - _threadPerIncomingConnectionFactory = null; - super.destroy(); + synchronized(this) + { + _state = StateClosed; + _acceptor = null; + _connections = null; + _threadPerIncomingConnectionFactory = null; + super.destroy(); + } Ice.SyscallException e = new Ice.SyscallException(); e.initCause(ex); diff --git a/java/src/IceInternal/Instance.java b/java/src/IceInternal/Instance.java index 08075389ec4..fb2e17747ba 100644 --- a/java/src/IceInternal/Instance.java +++ b/java/src/IceInternal/Instance.java @@ -457,7 +457,7 @@ public final class Instance } } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceInternal/ObjectAdapterFactory.java b/java/src/IceInternal/ObjectAdapterFactory.java index 68450385d88..7caa17ef2b7 100644 --- a/java/src/IceInternal/ObjectAdapterFactory.java +++ b/java/src/IceInternal/ObjectAdapterFactory.java @@ -173,7 +173,7 @@ public final class ObjectAdapterFactory _waitForShutdown = false; } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceInternal/OutgoingConnectionFactory.java b/java/src/IceInternal/OutgoingConnectionFactory.java index cddf01ea198..c6e060258db 100644 --- a/java/src/IceInternal/OutgoingConnectionFactory.java +++ b/java/src/IceInternal/OutgoingConnectionFactory.java @@ -538,7 +538,7 @@ public final class OutgoingConnectionFactory _destroyed = false; } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceInternal/TcpAcceptor.java b/java/src/IceInternal/TcpAcceptor.java index 8d1b8eb7b47..654c3fde933 100644 --- a/java/src/IceInternal/TcpAcceptor.java +++ b/java/src/IceInternal/TcpAcceptor.java @@ -26,10 +26,14 @@ class TcpAcceptor implements Acceptor _logger.trace(_traceLevels.networkCat, s); } - java.nio.channels.ServerSocketChannel fd = _fd; + java.nio.channels.ServerSocketChannel fd; + synchronized(this) + { + fd = _fd; + _fd = null; + } if(fd != null) { - _fd = null; try { fd.close(); @@ -130,7 +134,7 @@ class TcpAcceptor implements Acceptor } } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceInternal/TcpTransceiver.java b/java/src/IceInternal/TcpTransceiver.java index 17053a464d9..a7be7d9577e 100644 --- a/java/src/IceInternal/TcpTransceiver.java +++ b/java/src/IceInternal/TcpTransceiver.java @@ -27,19 +27,24 @@ final class TcpTransceiver implements Transceiver _logger.trace(_traceLevels.networkCat, s); } - assert(_fd != null); - try - { - _fd.close(); - _fd = null; - } - catch(java.io.IOException ex) - { - _fd = null; - Ice.SocketException se = new Ice.SocketException(); - se.initCause(ex); - throw se; - } + synchronized(this) + { + assert(_fd != null); + try + { + _fd.close(); + } + catch(java.io.IOException ex) + { + Ice.SocketException se = new Ice.SocketException(); + se.initCause(ex); + throw se; + } + finally + { + _fd = null; + } + } } public void @@ -345,7 +350,7 @@ final class TcpTransceiver implements Transceiver _desc = Network.fdToString(_fd); } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceInternal/ThreadPool.java b/java/src/IceInternal/ThreadPool.java index 7da1cf0c405..67256e507ad 100644 --- a/java/src/IceInternal/ThreadPool.java +++ b/java/src/IceInternal/ThreadPool.java @@ -122,7 +122,7 @@ public final class ThreadPool } } - protected void + protected synchronized void finalize() throws Throwable { @@ -274,7 +274,6 @@ public final class ThreadPool // wouldn't be possible here anyway, because otherwise the // other threads would never terminate.) // - assert(_destroyed); java.util.Iterator i = _threads.iterator(); while(i.hasNext()) { diff --git a/java/src/IceInternal/UdpTransceiver.java b/java/src/IceInternal/UdpTransceiver.java index 7933a34744e..16ae2c707ca 100644 --- a/java/src/IceInternal/UdpTransceiver.java +++ b/java/src/IceInternal/UdpTransceiver.java @@ -18,7 +18,7 @@ final class UdpTransceiver implements Transceiver return _fd; } - public void + public synchronized void close() { if(_traceLevels.network >= 1) @@ -403,7 +403,7 @@ final class UdpTransceiver implements Transceiver } } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceSSL/SslAcceptor.java b/java/src/IceSSL/SslAcceptor.java index 60571e60d08..8d9b984c05c 100644 --- a/java/src/IceSSL/SslAcceptor.java +++ b/java/src/IceSSL/SslAcceptor.java @@ -26,10 +26,14 @@ class SslAcceptor implements IceInternal.Acceptor _logger.trace(_instance.networkTraceCategory(), s); } - javax.net.ssl.SSLServerSocket fd = _fd; - if(fd != null) + javax.net.ssl.SSLServerSocket fd; + synchronized(this) { + fd = _fd; _fd = null; + } + if(fd != null) + { try { fd.close(); diff --git a/java/src/IceSSL/SslConnector.java b/java/src/IceSSL/SslConnector.java index 67a0a3a737c..1808b7b045a 100644 --- a/java/src/IceSSL/SslConnector.java +++ b/java/src/IceSSL/SslConnector.java @@ -19,7 +19,7 @@ final class SslConnector implements IceInternal.Connector _addr = addr; } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceSSL/SslTransceiver.java b/java/src/IceSSL/SslTransceiver.java index 080ceb5b1e4..2ab87607dbd 100644 --- a/java/src/IceSSL/SslTransceiver.java +++ b/java/src/IceSSL/SslTransceiver.java @@ -26,18 +26,23 @@ final class SslTransceiver implements IceInternal.Transceiver _logger.trace(_instance.networkTraceCategory(), s); } - assert(_fd != null); - try - { - _fd.close(); - _fd = null; - } - catch(java.io.IOException ex) + synchronized(this) { - _fd = null; - Ice.SocketException se = new Ice.SocketException(); - se.initCause(ex); - throw se; + assert(_fd != null); + try + { + _fd.close(); + } + catch(java.io.IOException ex) + { + Ice.SocketException se = new Ice.SocketException(); + se.initCause(ex); + throw se; + } + finally + { + _fd = null; + } } } @@ -331,7 +336,7 @@ final class SslTransceiver implements IceInternal.Transceiver _shutdown = false; } - protected void + protected synchronized void finalize() throws Throwable { diff --git a/java/src/IceUtil/Version.java b/java/src/IceUtil/Version.java index 6ca3596492b..e77bffcbc56 100644 --- a/java/src/IceUtil/Version.java +++ b/java/src/IceUtil/Version.java @@ -14,6 +14,6 @@ public final class Version // // The Ice version. // - public final static String ICE_STRING_VERSION = "2.1.0"; // "A.B.C", with A=major, B=minor, C=patch - public final static int ICE_INT_VERSION = 20100; // AABBCC, with AA=major, BB=minor, CC=patch + public final static String ICE_STRING_VERSION = "2.1.1"; // "A.B.C", with A=major, B=minor, C=patch + public final static int ICE_INT_VERSION = 20101; // AABBCC, with AA=major, BB=minor, CC=patch } -- cgit v1.2.3