summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/CHANGES3
-rw-r--r--java/src/Ice/CommunicatorI.java2
-rw-r--r--java/src/Ice/ObjectAdapterI.java2
-rw-r--r--java/src/Ice/_ObjectDelM.java17
-rw-r--r--java/src/IceInternal/ConnectionMonitor.java2
-rw-r--r--java/src/IceInternal/EventHandler.java7
-rw-r--r--java/src/IceInternal/IncomingBase.java17
-rw-r--r--java/src/IceInternal/IncomingConnectionFactory.java13
-rw-r--r--java/src/IceInternal/Instance.java2
-rw-r--r--java/src/IceInternal/ObjectAdapterFactory.java2
-rw-r--r--java/src/IceInternal/OutgoingConnectionFactory.java2
-rw-r--r--java/src/IceInternal/TcpAcceptor.java10
-rw-r--r--java/src/IceInternal/TcpTransceiver.java33
-rw-r--r--java/src/IceInternal/ThreadPool.java3
-rw-r--r--java/src/IceInternal/UdpTransceiver.java4
-rw-r--r--java/src/IceSSL/SslAcceptor.java8
-rw-r--r--java/src/IceSSL/SslConnector.java2
-rw-r--r--java/src/IceSSL/SslTransceiver.java29
-rw-r--r--java/src/IceUtil/Version.java4
-rw-r--r--java/test/Freeze/evictor/Client.java2
-rw-r--r--java/test/Freeze/evictor/Server.java1
-rw-r--r--java/test/Glacier2/router/Client.java2
-rw-r--r--java/test/Glacier2/router/Server.java2
-rw-r--r--java/test/Ice/adapterDeactivation/ServantLocatorI.java4
-rw-r--r--java/test/Ice/custom/Client.java2
-rw-r--r--java/test/Ice/custom/Server.java2
-rw-r--r--java/test/Ice/exceptions/Client.java2
-rw-r--r--java/test/Ice/facets/Client.java2
-rw-r--r--java/test/Ice/facets/Server.java2
-rw-r--r--java/test/Ice/faultTolerance/Client.java2
-rw-r--r--java/test/Ice/inheritance/Client.java2
-rw-r--r--java/test/Ice/inheritance/Server.java2
-rw-r--r--java/test/Ice/location/Client.java2
-rw-r--r--java/test/Ice/objects/Client.java2
-rw-r--r--java/test/Ice/objects/Server.java2
-rw-r--r--java/test/Ice/operations/Client.java1
-rw-r--r--java/test/Ice/operations/Server.java1
-rw-r--r--java/test/Ice/operationsAMD/Server.java2
-rw-r--r--java/test/Ice/package/Client.java2
-rw-r--r--java/test/Ice/package/Server.java2
-rw-r--r--java/test/Ice/slicing/exceptions/csrc/Client.java2
-rw-r--r--java/test/Ice/slicing/exceptions/ssrc/Server.java2
-rw-r--r--java/test/Ice/slicing/exceptionsAMD/Server.java2
-rw-r--r--java/test/Ice/slicing/objects/csrc/Client.java2
-rw-r--r--java/test/Ice/slicing/objects/ssrc/Server.java2
-rw-r--r--java/test/Ice/slicing/objectsAMD/Server.java2
-rw-r--r--java/test/Ice/stream/Client.java2
-rw-r--r--java/test/IcePack/deployer/Client.java2
-rw-r--r--java/test/IcePack/simple/Client.java2
-rw-r--r--javae/src/Ice/CommunicatorI.java2
-rw-r--r--javae/src/Ice/ObjectAdapterI.java2
-rw-r--r--javae/src/IceInternal/IncomingBase.java2
-rw-r--r--javae/src/IceInternal/IncomingConnectionFactory.java11
-rw-r--r--javae/src/IceInternal/Instance.java2
-rw-r--r--javae/src/IceInternal/ObjectAdapterFactory.java2
-rw-r--r--javae/src/IceInternal/OutgoingConnectionFactory.java2
-rw-r--r--javae/src/IceInternal/TcpAcceptor.java10
-rw-r--r--javae/src/IceInternal/TcpTransceiver.java11
58 files changed, 156 insertions, 109 deletions
diff --git a/java/CHANGES b/java/CHANGES
index b7ead8b432e..3a09e38fd69 100644
--- a/java/CHANGES
+++ b/java/CHANGES
@@ -1,6 +1,9 @@
Changes since version 2.1.0
---------------------------
+- Fixed a race condition that could cause a process to abort
+ during shutdown.
+
- Added sequences of fixed-length elements to throughput demo.
- Fixed a bug that could cause an assert if connections could not be
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
}
diff --git a/java/test/Freeze/evictor/Client.java b/java/test/Freeze/evictor/Client.java
index 0b8a76ef5b3..2b4a8fd391a 100644
--- a/java/test/Freeze/evictor/Client.java
+++ b/java/test/Freeze/evictor/Client.java
@@ -834,7 +834,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Freeze/evictor/Server.java b/java/test/Freeze/evictor/Server.java
index 13bd4a52b72..47decb48028 100644
--- a/java/test/Freeze/evictor/Server.java
+++ b/java/test/Freeze/evictor/Server.java
@@ -100,6 +100,7 @@ public class Server
}
}
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Glacier2/router/Client.java b/java/test/Glacier2/router/Client.java
index 73c2218a135..682484d53ee 100644
--- a/java/test/Glacier2/router/Client.java
+++ b/java/test/Glacier2/router/Client.java
@@ -24,7 +24,7 @@ public class Client
CallbackClient app = new CallbackClient();
int status = app.main("Client", argsH.value);
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Glacier2/router/Server.java b/java/test/Glacier2/router/Server.java
index 290409c07d0..9a40cc706a8 100644
--- a/java/test/Glacier2/router/Server.java
+++ b/java/test/Glacier2/router/Server.java
@@ -14,7 +14,7 @@ public class Server
{
CallbackServer app = new CallbackServer();
int status = app.main("Server", args);
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/adapterDeactivation/ServantLocatorI.java b/java/test/Ice/adapterDeactivation/ServantLocatorI.java
index 0244c3403a4..c266800efe6 100644
--- a/java/test/Ice/adapterDeactivation/ServantLocatorI.java
+++ b/java/test/Ice/adapterDeactivation/ServantLocatorI.java
@@ -17,7 +17,7 @@ public final class ServantLocatorI extends Ice.LocalObjectImpl implements Ice.Se
_deactivated = false;
}
- protected void
+ protected synchronized void
finalize()
throws Throwable
{
@@ -55,7 +55,7 @@ public final class ServantLocatorI extends Ice.LocalObjectImpl implements Ice.Se
test(co.message().equals("blahblah"));
}
- public void
+ public synchronized void
deactivate(String category)
{
test(!_deactivated);
diff --git a/java/test/Ice/custom/Client.java b/java/test/Ice/custom/Client.java
index afc658b81d3..c82456710aa 100644
--- a/java/test/Ice/custom/Client.java
+++ b/java/test/Ice/custom/Client.java
@@ -49,7 +49,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/custom/Server.java b/java/test/Ice/custom/Server.java
index 46ce9dcbeb3..1e066170427 100644
--- a/java/test/Ice/custom/Server.java
+++ b/java/test/Ice/custom/Server.java
@@ -53,7 +53,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/exceptions/Client.java b/java/test/Ice/exceptions/Client.java
index 3cb96863dc6..06c5df1c1ce 100644
--- a/java/test/Ice/exceptions/Client.java
+++ b/java/test/Ice/exceptions/Client.java
@@ -49,7 +49,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/facets/Client.java b/java/test/Ice/facets/Client.java
index a657d308718..853f23195fe 100644
--- a/java/test/Ice/facets/Client.java
+++ b/java/test/Ice/facets/Client.java
@@ -49,7 +49,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/facets/Server.java b/java/test/Ice/facets/Server.java
index 94dbf1d7555..b0463d48fbb 100644
--- a/java/test/Ice/facets/Server.java
+++ b/java/test/Ice/facets/Server.java
@@ -58,7 +58,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/faultTolerance/Client.java b/java/test/Ice/faultTolerance/Client.java
index 0ab59c89654..4185cb4acdb 100644
--- a/java/test/Ice/faultTolerance/Client.java
+++ b/java/test/Ice/faultTolerance/Client.java
@@ -110,7 +110,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/inheritance/Client.java b/java/test/Ice/inheritance/Client.java
index eda8a2c620f..916895de2e6 100644
--- a/java/test/Ice/inheritance/Client.java
+++ b/java/test/Ice/inheritance/Client.java
@@ -49,7 +49,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/inheritance/Server.java b/java/test/Ice/inheritance/Server.java
index cc91207f7f5..22ed28eeb73 100644
--- a/java/test/Ice/inheritance/Server.java
+++ b/java/test/Ice/inheritance/Server.java
@@ -51,7 +51,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/location/Client.java b/java/test/Ice/location/Client.java
index 12bf01002f0..c812365ead7 100644
--- a/java/test/Ice/location/Client.java
+++ b/java/test/Ice/location/Client.java
@@ -48,7 +48,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/objects/Client.java b/java/test/Ice/objects/Client.java
index 2ef6ce07276..d0f5946b2a9 100644
--- a/java/test/Ice/objects/Client.java
+++ b/java/test/Ice/objects/Client.java
@@ -82,7 +82,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/objects/Server.java b/java/test/Ice/objects/Server.java
index cc91207f7f5..22ed28eeb73 100644
--- a/java/test/Ice/objects/Server.java
+++ b/java/test/Ice/objects/Server.java
@@ -51,7 +51,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/operations/Client.java b/java/test/Ice/operations/Client.java
index 4b556028eb7..3edf4d4c3fd 100644
--- a/java/test/Ice/operations/Client.java
+++ b/java/test/Ice/operations/Client.java
@@ -76,6 +76,7 @@ public class Client
}
}
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/operations/Server.java b/java/test/Ice/operations/Server.java
index beeb7b1a292..7c779ab14e8 100644
--- a/java/test/Ice/operations/Server.java
+++ b/java/test/Ice/operations/Server.java
@@ -62,6 +62,7 @@ public class Server
}
}
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/operationsAMD/Server.java b/java/test/Ice/operationsAMD/Server.java
index 52656926a3a..64ea330e44b 100644
--- a/java/test/Ice/operationsAMD/Server.java
+++ b/java/test/Ice/operationsAMD/Server.java
@@ -62,7 +62,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/package/Client.java b/java/test/Ice/package/Client.java
index 735dbeda12a..bc9f39bdd00 100644
--- a/java/test/Ice/package/Client.java
+++ b/java/test/Ice/package/Client.java
@@ -47,7 +47,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/package/Server.java b/java/test/Ice/package/Server.java
index e5382fac7cf..7084884fabd 100644
--- a/java/test/Ice/package/Server.java
+++ b/java/test/Ice/package/Server.java
@@ -51,7 +51,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/slicing/exceptions/csrc/Client.java b/java/test/Ice/slicing/exceptions/csrc/Client.java
index 1791c9852b5..e74fd1cfad9 100644
--- a/java/test/Ice/slicing/exceptions/csrc/Client.java
+++ b/java/test/Ice/slicing/exceptions/csrc/Client.java
@@ -49,7 +49,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/slicing/exceptions/ssrc/Server.java b/java/test/Ice/slicing/exceptions/ssrc/Server.java
index 48368f782dc..4eb9cdc28ae 100644
--- a/java/test/Ice/slicing/exceptions/ssrc/Server.java
+++ b/java/test/Ice/slicing/exceptions/ssrc/Server.java
@@ -53,7 +53,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/slicing/exceptionsAMD/Server.java b/java/test/Ice/slicing/exceptionsAMD/Server.java
index 48368f782dc..4eb9cdc28ae 100644
--- a/java/test/Ice/slicing/exceptionsAMD/Server.java
+++ b/java/test/Ice/slicing/exceptionsAMD/Server.java
@@ -53,7 +53,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/slicing/objects/csrc/Client.java b/java/test/Ice/slicing/objects/csrc/Client.java
index 1791c9852b5..e74fd1cfad9 100644
--- a/java/test/Ice/slicing/objects/csrc/Client.java
+++ b/java/test/Ice/slicing/objects/csrc/Client.java
@@ -49,7 +49,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/slicing/objects/ssrc/Server.java b/java/test/Ice/slicing/objects/ssrc/Server.java
index 48368f782dc..4eb9cdc28ae 100644
--- a/java/test/Ice/slicing/objects/ssrc/Server.java
+++ b/java/test/Ice/slicing/objects/ssrc/Server.java
@@ -53,7 +53,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/slicing/objectsAMD/Server.java b/java/test/Ice/slicing/objectsAMD/Server.java
index 48368f782dc..4eb9cdc28ae 100644
--- a/java/test/Ice/slicing/objectsAMD/Server.java
+++ b/java/test/Ice/slicing/objectsAMD/Server.java
@@ -53,7 +53,7 @@ public class Server
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/Ice/stream/Client.java b/java/test/Ice/stream/Client.java
index a0d2e7f0f1a..b6c3cd457e2 100644
--- a/java/test/Ice/stream/Client.java
+++ b/java/test/Ice/stream/Client.java
@@ -477,7 +477,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/IcePack/deployer/Client.java b/java/test/IcePack/deployer/Client.java
index 99dc591e5f8..da8be540bc3 100644
--- a/java/test/IcePack/deployer/Client.java
+++ b/java/test/IcePack/deployer/Client.java
@@ -64,7 +64,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/java/test/IcePack/simple/Client.java b/java/test/IcePack/simple/Client.java
index 275e3842966..71bab6fdb99 100644
--- a/java/test/IcePack/simple/Client.java
+++ b/java/test/IcePack/simple/Client.java
@@ -73,7 +73,7 @@ public class Client
}
}
- System.gc();
+ System.gc();
System.exit(status);
}
}
diff --git a/javae/src/Ice/CommunicatorI.java b/javae/src/Ice/CommunicatorI.java
index dd738646b5b..c2468e5c73f 100644
--- a/javae/src/Ice/CommunicatorI.java
+++ b/javae/src/Ice/CommunicatorI.java
@@ -216,7 +216,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/javae/src/Ice/ObjectAdapterI.java b/javae/src/Ice/ObjectAdapterI.java
index 2341f93d982..5b84323a2e4 100644
--- a/javae/src/Ice/ObjectAdapterI.java
+++ b/javae/src/Ice/ObjectAdapterI.java
@@ -631,7 +631,7 @@ public final class ObjectAdapterI extends LocalObjectImpl implements ObjectAdapt
}
}
- protected void
+ protected synchronized void
finalize()
throws Throwable
{
diff --git a/javae/src/IceInternal/IncomingBase.java b/javae/src/IceInternal/IncomingBase.java
index e4c63d2f79d..d1a1e7dcd99 100644
--- a/javae/src/IceInternal/IncomingBase.java
+++ b/javae/src/IceInternal/IncomingBase.java
@@ -54,7 +54,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)
diff --git a/javae/src/IceInternal/IncomingConnectionFactory.java b/javae/src/IceInternal/IncomingConnectionFactory.java
index c01ce6a8b6c..7d10e1db317 100644
--- a/javae/src/IceInternal/IncomingConnectionFactory.java
+++ b/javae/src/IceInternal/IncomingConnectionFactory.java
@@ -280,10 +280,13 @@ public final class IncomingConnectionFactory
//
// Clean up for finalizer.
//
- _state = StateClosed;
- _acceptor = null;
- _connections = null;
- _threadPerIncomingConnectionFactory = null;
+ synchronized(this)
+ {
+ _state = StateClosed;
+ _acceptor = null;
+ _connections = null;
+ _threadPerIncomingConnectionFactory = null;
+ }
Ice.SyscallException e = new Ice.SyscallException();
e.initCause(ex);
diff --git a/javae/src/IceInternal/Instance.java b/javae/src/IceInternal/Instance.java
index e0f23851d24..3e50a8ed7bc 100644
--- a/javae/src/IceInternal/Instance.java
+++ b/javae/src/IceInternal/Instance.java
@@ -313,7 +313,7 @@ public class Instance
}
}
- protected void
+ protected synchronized void
finalize()
throws Throwable
{
diff --git a/javae/src/IceInternal/ObjectAdapterFactory.java b/javae/src/IceInternal/ObjectAdapterFactory.java
index 68450385d88..7caa17ef2b7 100644
--- a/javae/src/IceInternal/ObjectAdapterFactory.java
+++ b/javae/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/javae/src/IceInternal/OutgoingConnectionFactory.java b/javae/src/IceInternal/OutgoingConnectionFactory.java
index cc8567a4a77..40dfbf07c56 100644
--- a/javae/src/IceInternal/OutgoingConnectionFactory.java
+++ b/javae/src/IceInternal/OutgoingConnectionFactory.java
@@ -489,7 +489,7 @@ public final class OutgoingConnectionFactory
_destroyed = false;
}
- protected void
+ protected synchronized void
finalize()
throws Throwable
{
diff --git a/javae/src/IceInternal/TcpAcceptor.java b/javae/src/IceInternal/TcpAcceptor.java
index 64d2fe5bbe6..55dafb1d993 100644
--- a/javae/src/IceInternal/TcpAcceptor.java
+++ b/javae/src/IceInternal/TcpAcceptor.java
@@ -26,10 +26,14 @@ class TcpAcceptor implements Acceptor
_logger.trace(_traceLevels.networkCat, s);
}
- java.nio.channels.ServerSocketChannel fd = _fd;
- if(fd != null)
+ java.nio.channels.ServerSocketChannel fd;
+ synchronized(this)
{
+ fd = _fd;
_fd = null;
+ }
+ if(fd != null)
+ {
try
{
fd.close();
@@ -126,7 +130,7 @@ class TcpAcceptor implements Acceptor
}
}
- protected void
+ protected synchronized void
finalize()
throws Throwable
{
diff --git a/javae/src/IceInternal/TcpTransceiver.java b/javae/src/IceInternal/TcpTransceiver.java
index d118af8ca32..691b0da58a0 100644
--- a/javae/src/IceInternal/TcpTransceiver.java
+++ b/javae/src/IceInternal/TcpTransceiver.java
@@ -27,19 +27,24 @@ final class TcpTransceiver implements Transceiver
_logger.trace(_traceLevels.networkCat, s);
}
+ synchronized(this)
+ {
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;
}
+ finally
+ {
+ _fd = null;
+ }
+ }
}
public void
@@ -334,7 +339,7 @@ final class TcpTransceiver implements Transceiver
_desc = Network.fdToString(_fd);
}
- protected void
+ protected synchronized void
finalize()
throws Throwable
{