summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/ObjectAdapterFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/IceInternal/ObjectAdapterFactory.java')
-rw-r--r--java/src/IceInternal/ObjectAdapterFactory.java31
1 files changed, 19 insertions, 12 deletions
diff --git a/java/src/IceInternal/ObjectAdapterFactory.java b/java/src/IceInternal/ObjectAdapterFactory.java
index 7caa17ef2b7..f570684cbd0 100644
--- a/java/src/IceInternal/ObjectAdapterFactory.java
+++ b/java/src/IceInternal/ObjectAdapterFactory.java
@@ -75,17 +75,24 @@ public final class ObjectAdapterFactory
//
// Now we wait for deactivation of each object adapter.
//
- java.util.Iterator i = _adapters.values().iterator();
- while(i.hasNext())
- {
- Ice.ObjectAdapter adapter = (Ice.ObjectAdapter)i.next();
- adapter.waitForDeactivate();
- }
-
- //
- // We're done, now we can throw away the object adapters.
- //
- _adapters.clear();
+ if(_adapters != null)
+ {
+ java.util.Iterator i = _adapters.values().iterator();
+ while(i.hasNext())
+ {
+ Ice.ObjectAdapter adapter = (Ice.ObjectAdapter)i.next();
+ adapter.waitForDeactivate();
+ }
+
+ //
+ // We're done, now we can throw away the object adapters.
+ //
+ // For consistency with C#, we set _adapters to null
+ // so that our finalizer does not try to invoke any
+ // methods on member objects.
+ //
+ _adapters = null;
+ }
synchronized(this)
{
@@ -179,7 +186,7 @@ public final class ObjectAdapterFactory
{
assert(_instance == null);
assert(_communicator == null);
- assert(_adapters.size() == 0);
+ assert(_adapters == null);
assert(!_waitForShutdown);
super.finalize();