summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/src/Slice/JavaUtil.cpp15
-rw-r--r--cpp/src/slice2java/Gen.cpp110
-rw-r--r--cpp/src/slice2java/GenCompat.cpp127
-rw-r--r--java-compat/src/Ice/src/main/java/Ice/CommunicatorI.java11
-rw-r--r--java-compat/src/Ice/src/main/java/IceInternal/Instance.java17
-rw-r--r--java-compat/test/src/main/java/test/Ice/info/AllTests.java6
-rw-r--r--java-compat/test/src/main/java/test/Util/Application.java10
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java11
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/Ice/Util.java15
-rw-r--r--java/src/Ice/src/main/java/com/zeroc/IceInternal/Instance.java17
-rw-r--r--java/test/src/main/java/test/Ice/info/AllTests.java6
-rw-r--r--java/test/src/main/java/test/Util/Application.java8
-rw-r--r--python/python/Ice.py10
-rwxr-xr-xpython/test/Ice/acm/Client.py7
-rwxr-xr-xpython/test/Ice/acm/Server.py7
-rw-r--r--python/test/Ice/admin/Client.py7
-rw-r--r--python/test/Ice/admin/Server.py7
-rwxr-xr-xpython/test/Ice/ami/Client.py7
-rwxr-xr-xpython/test/Ice/ami/Collocated.py7
-rwxr-xr-xpython/test/Ice/ami/Server.py7
-rwxr-xr-xpython/test/Ice/binding/Client.py7
-rwxr-xr-xpython/test/Ice/binding/Server.py7
-rwxr-xr-xpython/test/Ice/blobject/Client.py38
-rwxr-xr-xpython/test/Ice/blobject/Server.py7
-rwxr-xr-xpython/test/Ice/checksum/Client.py7
-rwxr-xr-xpython/test/Ice/checksum/Server.py7
-rwxr-xr-xpython/test/Ice/custom/Client.py7
-rwxr-xr-xpython/test/Ice/custom/Server.py7
-rwxr-xr-xpython/test/Ice/defaultServant/Client.py7
-rwxr-xr-xpython/test/Ice/enums/Client.py7
-rwxr-xr-xpython/test/Ice/enums/Server.py7
-rwxr-xr-xpython/test/Ice/exceptions/Client.py7
-rwxr-xr-xpython/test/Ice/exceptions/Collocated.py7
-rwxr-xr-xpython/test/Ice/exceptions/Server.py7
-rwxr-xr-xpython/test/Ice/exceptions/ServerAMD.py7
-rwxr-xr-xpython/test/Ice/facets/Client.py7
-rwxr-xr-xpython/test/Ice/facets/Collocated.py7
-rwxr-xr-xpython/test/Ice/facets/Server.py7
-rwxr-xr-xpython/test/Ice/faultTolerance/Client.py7
-rwxr-xr-xpython/test/Ice/faultTolerance/Server.py7
-rwxr-xr-xpython/test/Ice/info/Client.py7
-rwxr-xr-xpython/test/Ice/info/Server.py7
-rwxr-xr-xpython/test/Ice/inheritance/Client.py7
-rwxr-xr-xpython/test/Ice/inheritance/Collocated.py7
-rwxr-xr-xpython/test/Ice/inheritance/Server.py7
-rwxr-xr-xpython/test/Ice/location/Client.py7
-rwxr-xr-xpython/test/Ice/location/Server.py7
-rwxr-xr-xpython/test/Ice/objects/Client.py7
-rwxr-xr-xpython/test/Ice/objects/Collocated.py7
-rwxr-xr-xpython/test/Ice/objects/Server.py7
-rwxr-xr-xpython/test/Ice/operations/Client.py7
-rwxr-xr-xpython/test/Ice/operations/Collocated.py7
-rwxr-xr-xpython/test/Ice/operations/Server.py7
-rwxr-xr-xpython/test/Ice/operations/ServerAMD.py7
-rwxr-xr-xpython/test/Ice/optional/Client.py7
-rwxr-xr-xpython/test/Ice/optional/Server.py7
-rwxr-xr-xpython/test/Ice/optional/ServerAMD.py7
-rwxr-xr-xpython/test/Ice/proxy/Client.py7
-rwxr-xr-xpython/test/Ice/proxy/Collocated.py7
-rwxr-xr-xpython/test/Ice/proxy/Server.py7
-rwxr-xr-xpython/test/Ice/proxy/ServerAMD.py7
-rwxr-xr-xpython/test/Ice/slicing/exceptions/Client.py7
-rwxr-xr-xpython/test/Ice/slicing/exceptions/Server.py7
-rwxr-xr-xpython/test/Ice/slicing/exceptions/ServerAMD.py7
-rwxr-xr-xpython/test/Ice/slicing/objects/Client.py7
-rwxr-xr-xpython/test/Ice/slicing/objects/Server.py7
-rwxr-xr-xpython/test/Ice/slicing/objects/ServerAMD.py7
-rwxr-xr-xpython/test/Ice/timeout/Client.py7
-rwxr-xr-xpython/test/Ice/timeout/Server.py7
-rwxr-xr-xpython/test/Slice/escape/Client.py7
-rwxr-xr-xpython/test/Slice/structure/Client.py7
-rw-r--r--slice/Ice/Communicator.ice2
72 files changed, 378 insertions, 424 deletions
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp
index 3c6d0ece494..642b16f7e1f 100644
--- a/cpp/src/Slice/JavaUtil.cpp
+++ b/cpp/src/Slice/JavaUtil.cpp
@@ -396,6 +396,11 @@ private:
result.push_back(s);
continue;
}
+ else if(s.substr(prefix.size(), pos - prefix.size()) == "implements")
+ {
+ result.push_back(s);
+ continue;
+ }
emitWarning(cont->file(), cont->line(), "ignoring invalid metadata `" + s + "'");
}
@@ -455,7 +460,7 @@ private:
else if(i->find("java:protobuf:") == 0 || i->find("java:serializable:") == 0)
{
//
- // Only valid in sequence defintion which is checked in visitSequence
+ // Only valid in sequence definition which is checked in visitSequence
//
emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
}
@@ -468,6 +473,14 @@ private:
}
emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
}
+ else if(i->find("java:implements:") == 0)
+ {
+ if(ClassDefPtr::dynamicCast(p) || StructPtr::dynamicCast(p))
+ {
+ continue;
+ }
+ emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
+ }
}
}
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 6aee01c293b..6fea7f223f1 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -2445,6 +2445,20 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
Output& out = output();
+ //
+ // Check for java:implements metadata.
+ //
+ const StringList metaData = p->getMetaData();
+ static const string prefix = "java:implements:";
+ StringList implements;
+ for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); ++q)
+ {
+ if(q->find(prefix) == 0)
+ {
+ implements.push_back(q->substr(prefix.size()));
+ }
+ }
+
DocCommentPtr dc = parseDocComment(p);
//
@@ -2459,61 +2473,79 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
if(p->isInterface())
{
out << nl << "public interface " << fixKwd(name);
- if(!p->isLocal())
+ ClassList::const_iterator q = bases.begin();
+ StringList::const_iterator r = implements.begin();
+
+ if(!p->isLocal() || !bases.empty() || !implements.empty())
{
out << " extends ";
- out.useCurrentPosAsIndent();
- out << "com.zeroc.Ice.Object";
}
- else
+ out.useCurrentPosAsIndent();
+ if(!p->isLocal() && bases.empty())
{
- if(!bases.empty())
- {
- out << " extends ";
- }
- out.useCurrentPosAsIndent();
+ out << "com.zeroc.Ice.Object";
}
-
- ClassList::const_iterator q = bases.begin();
- if(p->isLocal() && q != bases.end())
+ else if(q != bases.end())
{
out << getAbsolute(*q++, package);
}
- while(q != bases.end())
+ else if(r != implements.end())
+ {
+ out << *r++;
+ }
+
+ for(;q != bases.end(); ++q)
{
out << ',' << nl << getAbsolute(*q, package);
- q++;
+ }
+ for(; r != implements.end(); ++r)
+ {
+ out << ',' << nl << *r;
}
out.restoreIndent();
}
else
{
out << nl << "public ";
- if(p->isLocal() && !p->allOperations().empty())
+ if((p->isLocal() && !p->allOperations().empty()) || !implements.empty())
{
out << "abstract ";
}
out << "class " << fixKwd(name);
out.useCurrentPosAsIndent();
- StringList implements;
+ if(baseClass)
+ {
+ out << " extends " << getAbsolute(baseClass, package);
+ bases.pop_front();
+ }
+ else if(!p->isLocal())
+ {
+ out << " extends com.zeroc.Ice.Value";
+ }
+ else
+ {
+ implements.push_back("java.lang.Cloneable");
+ }
- if(bases.empty() || bases.front()->isInterface())
+ if(!implements.empty())
{
- if(p->isLocal())
+ if(baseClass || !p->isLocal())
{
- implements.push_back("java.lang.Cloneable");
+ out << nl;
}
- else
+
+ out << " implements ";
+ out.useCurrentPosAsIndent();
+ for(StringList::const_iterator q = implements.begin(); q != implements.end(); ++q)
{
- out << " extends com.zeroc.Ice.Value";
+ if(q != implements.begin())
+ {
+ out << ',' << nl;
+ }
+ out << *q;
}
- }
- else
- {
- out << " extends ";
- out << getAbsolute(baseClass, package);
- bases.pop_front();
+ out.restoreIndent();
}
out.restoreIndent();
@@ -3296,6 +3328,20 @@ Slice::Gen::TypesVisitor::visitStructStart(const StructPtr& p)
Output& out = output();
+ //
+ // Check for java:implements metadata.
+ //
+ const StringList metaData = p->getMetaData();
+ static const string prefix = "java:implements:";
+ StringList implements;
+ for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); ++q)
+ {
+ if(q->find(prefix) == 0)
+ {
+ implements.push_back(q->substr(prefix.size()));
+ }
+ }
+
out << sp;
DocCommentPtr dc = parseDocComment(p);
@@ -3305,10 +3351,16 @@ Slice::Gen::TypesVisitor::visitStructStart(const StructPtr& p)
out << nl << "@Deprecated";
}
- out << nl << "public class " << name << " implements java.lang.Cloneable";
+ out << nl << "public class " << name << " implements ";
+ out.useCurrentPosAsIndent();
+ out << "java.lang.Cloneable";
if(!p->isLocal())
{
- out << ", java.io.Serializable";
+ out << "," << nl << "java.io.Serializable";
+ }
+ for(StringList::const_iterator q = implements.begin(); q != implements.end(); ++q)
+ {
+ out << "," << nl << *q;
}
out << sb;
diff --git a/cpp/src/slice2java/GenCompat.cpp b/cpp/src/slice2java/GenCompat.cpp
index eb0a18ddc4c..7bccb844408 100644
--- a/cpp/src/slice2java/GenCompat.cpp
+++ b/cpp/src/slice2java/GenCompat.cpp
@@ -2578,6 +2578,20 @@ Slice::GenCompat::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
Output& out = output();
//
+ // Check for java:implements metadata.
+ //
+ const StringList metaData = p->getMetaData();
+ static const string prefix = "java:implements:";
+ StringList implements;
+ for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); ++q)
+ {
+ if(q->find(prefix) == 0)
+ {
+ implements.push_back(q->substr(prefix.size()));
+ }
+ }
+
+ //
// Slice interfaces map to Java interfaces.
//
out << sp;
@@ -2585,108 +2599,91 @@ Slice::GenCompat::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
if(p->isInterface())
{
out << nl << "public interface " << fixKwd(name);
- if(!p->isLocal())
+ ClassList::const_iterator q = bases.begin();
+ StringList::const_iterator r = implements.begin();
+ if(!p->isLocal() || !bases.empty() || !implements.empty())
{
out << " extends ";
- out.useCurrentPosAsIndent();
- out << "Ice.Object";
- out << "," << nl << '_' << name;
- out << "Operations, _" << name << "OperationsNC";
}
- else
+ out.useCurrentPosAsIndent();
+ if(!p->isLocal())
{
- if(!bases.empty())
+ out << '_' << name << "Operations, _" << name << "OperationsNC";
+ if(bases.empty())
{
- out << " extends ";
+ out << "," << nl << "Ice.Object";
}
- out.useCurrentPosAsIndent();
}
-
- ClassList::const_iterator q = bases.begin();
- if(p->isLocal() && q != bases.end())
+ else if(q != bases.end())
{
out << getAbsolute(*q++, package);
}
- while(q != bases.end())
+ else if(r != implements.end())
+ {
+ out << *r++;
+ }
+
+ for(;q != bases.end(); ++q)
{
out << ',' << nl << getAbsolute(*q, package);
- q++;
+ }
+ for(; r != implements.end(); ++r)
+ {
+ out << ',' << nl << *r;
}
out.restoreIndent();
}
else
{
out << nl << "public ";
- if(p->allOperations().size() > 0) // Don't use isAbstract() - see bug 3739
+ if(p->allOperations().size() > 0 || !implements.empty()) // Don't use isAbstract() - see bug 3739
{
out << "abstract ";
}
out << "class " << fixKwd(name);
out.useCurrentPosAsIndent();
- StringList implements;
- bool implementsOnNewLine = true;
-
- if(bases.empty() || bases.front()->isInterface())
+ if(baseClass)
{
- if(p->isLocal())
- {
- implementsOnNewLine = false;
- implements.push_back("java.lang.Cloneable");
- }
- else
- {
- out << " extends Ice.ObjectImpl";
- }
+ out << " extends " << getAbsolute(baseClass, package);
+ bases.pop_front();
+ }
+ else if(!p->isLocal())
+ {
+ out << " extends Ice.ObjectImpl";
}
else
{
- out << " extends ";
- out << getAbsolute(baseClass, package);
- bases.pop_front();
+ implements.push_back("java.lang.Cloneable");
}
- //
- // Implement interfaces
- //
-
- if(p->isAbstract())
+ if(p->isAbstract() && !p->isLocal())
{
- if(!p->isLocal())
- {
- implements.push_back("_" + name + "Operations");
- implements.push_back("_" + name + "OperationsNC");
- }
+ implements.push_back("_" + name + "Operations");
+ implements.push_back("_" + name + "OperationsNC");
}
- if(!bases.empty())
+ for(ClassList::const_iterator q = bases.begin(); q != bases.end(); ++q)
{
- for(ClassList::const_iterator q = bases.begin(); q != bases.end();)
- {
- implements.push_back(getAbsolute(*q, package));
- q++;
- }
+ implements.push_back(getAbsolute(*q, package));
}
if(!implements.empty())
{
- if(implementsOnNewLine)
+ if(baseClass || !p->isLocal())
{
out << nl;
}
out << " implements ";
out.useCurrentPosAsIndent();
-
- for(StringList::const_iterator q = implements.begin(); q != implements.end();)
+ for(StringList::const_iterator q = implements.begin(); q != implements.end(); ++q)
{
if(q != implements.begin())
{
out << ',' << nl;
}
out << *q;
- q++;
}
-
out.restoreIndent();
}
@@ -3480,15 +3477,37 @@ Slice::GenCompat::TypesVisitor::visitStructStart(const StructPtr& p)
Output& out = output();
+ //
+ // Check for java:implements metadata.
+ //
+ const StringList metaData = p->getMetaData();
+ static const string prefix = "java:implements:";
+ StringList implements;
+ for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); ++q)
+ {
+ if(q->find(prefix) == 0)
+ {
+ implements.push_back(q->substr(prefix.size()));
+ }
+ }
+
out << sp;
writeDocComment(out, p, getDeprecateReason(p, 0, "type"));
- out << nl << "public class " << name << " implements java.lang.Cloneable";
+ out << nl << "public class " << name << " implements ";
+ out.useCurrentPosAsIndent();
+ out << "java.lang.Cloneable";
if(!p->isLocal())
{
- out << ", java.io.Serializable";
+ out << "," << nl << "java.io.Serializable";
}
+ for(StringList::const_iterator q = implements.begin(); q != implements.end(); ++q)
+ {
+ out << "," << nl << *q;
+ }
+ out.restoreIndent();
+
out << sb;
return true;
diff --git a/java-compat/src/Ice/src/main/java/Ice/CommunicatorI.java b/java-compat/src/Ice/src/main/java/Ice/CommunicatorI.java
index de973f2c75a..e4eea1ecf6d 100644
--- a/java-compat/src/Ice/src/main/java/Ice/CommunicatorI.java
+++ b/java-compat/src/Ice/src/main/java/Ice/CommunicatorI.java
@@ -13,9 +13,16 @@ public final class CommunicatorI implements Communicator
{
@Override
public void
+ close()
+ {
+ _instance.destroy(false); // Don't allow destroy to be interrupted if called from try with statement.
+ }
+
+ @Override
+ public void
destroy()
{
- _instance.destroy();
+ _instance.destroy(true); // Destroy is interruptible when call explicitly.
}
@Override
@@ -371,7 +378,7 @@ public final class CommunicatorI implements Communicator
}
catch(RuntimeException ex)
{
- _instance.destroy();
+ _instance.destroy(false);
throw ex;
}
}
diff --git a/java-compat/src/Ice/src/main/java/IceInternal/Instance.java b/java-compat/src/Ice/src/main/java/IceInternal/Instance.java
index 997b64313f6..2007fcb57ff 100644
--- a/java-compat/src/Ice/src/main/java/IceInternal/Instance.java
+++ b/java-compat/src/Ice/src/main/java/IceInternal/Instance.java
@@ -1121,7 +1121,7 @@ public final class Instance implements Ice.ClassResolver
}
catch(Ice.LocalException ex)
{
- destroy();
+ destroy(false);
throw ex;
}
}
@@ -1348,9 +1348,9 @@ public final class Instance implements Ice.ClassResolver
//
@SuppressWarnings("deprecation")
public void
- destroy()
+ destroy(boolean interruptible)
{
- if(Thread.interrupted())
+ if(interruptible && Thread.interrupted())
{
throw new Ice.OperationInterruptedException();
}
@@ -1370,7 +1370,10 @@ public final class Instance implements Ice.ClassResolver
}
catch(InterruptedException ex)
{
- throw new Ice.OperationInterruptedException();
+ if(interruptible)
+ {
+ throw new Ice.OperationInterruptedException();
+ }
}
}
@@ -1479,7 +1482,10 @@ public final class Instance implements Ice.ClassResolver
}
catch(InterruptedException ex)
{
- throw new Ice.OperationInterruptedException();
+ if(interruptible)
+ {
+ throw new Ice.OperationInterruptedException();
+ }
}
//
@@ -1570,6 +1576,7 @@ public final class Instance implements Ice.ClassResolver
{
if(_state == StateDestroyInProgress)
{
+ assert(interruptible);
_state = StateActive;
notifyAll();
}
diff --git a/java-compat/test/src/main/java/test/Ice/info/AllTests.java b/java-compat/test/src/main/java/test/Ice/info/AllTests.java
index 4de2a87c2ff..a52714ac866 100644
--- a/java-compat/test/src/main/java/test/Ice/info/AllTests.java
+++ b/java-compat/test/src/main/java/test/Ice/info/AllTests.java
@@ -196,6 +196,12 @@ public class AllTests
test(info.rcvSize >= 1024);
test(info.sndSize >= 2048);
+ //
+ // Make sure the local slice class is cloneable
+ //
+ java.lang.Cloneable cloneable = info;
+ Ice.TCPConnectionInfo info2 = (Ice.TCPConnectionInfo)info.clone();
+
java.util.Map<String, String> ctx = testIntf.getConnectionInfoAsContext();
test(ctx.get("incoming").equals("true"));
test(ctx.get("adapterName").equals("TestAdapter"));
diff --git a/java-compat/test/src/main/java/test/Util/Application.java b/java-compat/test/src/main/java/test/Util/Application.java
index 30fcbc3d3af..59d76ceac2c 100644
--- a/java-compat/test/src/main/java/test/Util/Application.java
+++ b/java-compat/test/src/main/java/test/Util/Application.java
@@ -92,9 +92,9 @@ public abstract class Application
int status = 0;
- try
+ try(Ice.Communicator communicator = Util.initialize(argHolder, initData))
{
- _communicator = Util.initialize(argHolder, initData);
+ _communicator = communicator;
if(_communicatorListener != null)
{
_communicatorListener.communicatorInitialized(_communicator);
@@ -131,15 +131,11 @@ public abstract class Application
err.printStackTrace(writer);
status = 1;
}
- writer.flush();
-
- if(_communicator != null)
+ finally
{
- _communicator.destroy();
_communicator = null;
}
writer.flush();
-
return status;
}
diff --git a/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java b/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java
index 3ee8b9f7054..1f9041840b0 100644
--- a/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java
+++ b/java/src/Ice/src/main/java/com/zeroc/Ice/CommunicatorI.java
@@ -13,9 +13,16 @@ public final class CommunicatorI implements Communicator
{
@Override
public void
+ close()
+ {
+ _instance.destroy(false); // Don't allow destroy to be interrupted if called from try with statement.
+ }
+
+ @Override
+ public void
destroy()
{
- _instance.destroy();
+ _instance.destroy(true); // Destroy is interruptible when call explicitly.
}
@Override
@@ -315,7 +322,7 @@ public final class CommunicatorI implements Communicator
}
catch(RuntimeException ex)
{
- _instance.destroy();
+ _instance.destroy(false);
throw ex;
}
}
diff --git a/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java b/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java
index ff50bab15e7..b4e008352da 100644
--- a/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java
+++ b/java/src/Ice/src/main/java/com/zeroc/Ice/Util.java
@@ -84,8 +84,21 @@ public final class Util
/**
* Encapsulates the results of a call to initialize().
**/
- public static class InitializeResult
+ public static class InitializeResult implements java.lang.AutoCloseable
{
+ @Override
+ public void close()
+ {
+ try
+ {
+ communicator.close();
+ }
+ catch(java.lang.Exception ex)
+ {
+ assert(false);
+ }
+ }
+
/** The new communicator. */
public Communicator communicator;
diff --git a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Instance.java b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Instance.java
index 5bf70b1d2f6..305fee3f5d3 100644
--- a/java/src/Ice/src/main/java/com/zeroc/IceInternal/Instance.java
+++ b/java/src/Ice/src/main/java/com/zeroc/IceInternal/Instance.java
@@ -1171,7 +1171,7 @@ public final class Instance implements com.zeroc.Ice.ClassResolver
}
catch(com.zeroc.Ice.LocalException ex)
{
- destroy();
+ destroy(false);
throw ex;
}
}
@@ -1401,9 +1401,9 @@ public final class Instance implements com.zeroc.Ice.ClassResolver
//
@SuppressWarnings("deprecation")
public void
- destroy()
+ destroy(boolean interruptible)
{
- if(Thread.interrupted())
+ if(interruptible && Thread.interrupted())
{
throw new com.zeroc.Ice.OperationInterruptedException();
}
@@ -1423,7 +1423,10 @@ public final class Instance implements com.zeroc.Ice.ClassResolver
}
catch(InterruptedException ex)
{
- throw new com.zeroc.Ice.OperationInterruptedException();
+ if(interruptible)
+ {
+ throw new com.zeroc.Ice.OperationInterruptedException();
+ }
}
}
@@ -1532,7 +1535,10 @@ public final class Instance implements com.zeroc.Ice.ClassResolver
}
catch(InterruptedException ex)
{
- throw new com.zeroc.Ice.OperationInterruptedException();
+ if(interruptible)
+ {
+ throw new com.zeroc.Ice.OperationInterruptedException();
+ }
}
//
@@ -1624,6 +1630,7 @@ public final class Instance implements com.zeroc.Ice.ClassResolver
{
if(_state == StateDestroyInProgress)
{
+ assert(interruptible);
_state = StateActive;
notifyAll();
}
diff --git a/java/test/src/main/java/test/Ice/info/AllTests.java b/java/test/src/main/java/test/Ice/info/AllTests.java
index 9123be0a685..d22aaf55e5b 100644
--- a/java/test/src/main/java/test/Ice/info/AllTests.java
+++ b/java/test/src/main/java/test/Ice/info/AllTests.java
@@ -210,6 +210,12 @@ public class AllTests
test(info.rcvSize >= 1024);
test(info.sndSize >= 2048);
+ //
+ // Make sure the local slice class is cloneable
+ //
+ java.lang.Cloneable cloneable = info;
+ TCPConnectionInfo info2 = (TCPConnectionInfo)info.clone();
+
java.util.Map<String, String> ctx = testIntf.getConnectionInfoAsContext();
test(ctx.get("incoming").equals("true"));
test(ctx.get("adapterName").equals("TestAdapter"));
diff --git a/java/test/src/main/java/test/Util/Application.java b/java/test/src/main/java/test/Util/Application.java
index 73f49b04ff9..50c0badd0b8 100644
--- a/java/test/src/main/java/test/Util/Application.java
+++ b/java/test/src/main/java/test/Util/Application.java
@@ -94,9 +94,8 @@ public abstract class Application
int status = 0;
- try
+ try(Util.InitializeResult ir = Util.initialize(cpr.args, initData))
{
- Util.InitializeResult ir = Util.initialize(cpr.args, initData);
_communicator = ir.communicator;
if(_communicatorListener != null)
{
@@ -134,11 +133,8 @@ public abstract class Application
err.printStackTrace(writer);
status = 1;
}
- writer.flush();
-
- if(_communicator != null)
+ finally
{
- _communicator.destroy();
_communicator = null;
}
writer.flush();
diff --git a/python/python/Ice.py b/python/python/Ice.py
index 4c7e80227cf..80b48c639fc 100644
--- a/python/python/Ice.py
+++ b/python/python/Ice.py
@@ -318,10 +318,10 @@ Returns:
# pass
class InterfaceByValue(Value):
-
+
def __init__(self, id):
self.id = id
-
+
def ice_id(self):
return self.id
@@ -838,6 +838,12 @@ class CommunicatorI(Communicator):
self._impl = impl
impl._setWrapper(self)
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ self._impl.destroy()
+
def destroy(self):
self._impl.destroy()
diff --git a/python/test/Ice/acm/Client.py b/python/test/Ice/acm/Client.py
index 8e9586ab9f7..7a2023a4374 100755
--- a/python/test/Ice/acm/Client.py
+++ b/python/test/Ice/acm/Client.py
@@ -32,13 +32,10 @@ try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty('Ice.Warn.Connections', '0')
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/acm/Server.py b/python/test/Ice/acm/Server.py
index 2db5b7dece5..3631b716932 100755
--- a/python/test/Ice/acm/Server.py
+++ b/python/test/Ice/acm/Server.py
@@ -37,13 +37,10 @@ try:
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty("Ice.Warn.Connections", "0");
initData.properties.setProperty("Ice.ACM.Timeout", "1");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/admin/Client.py b/python/test/Ice/admin/Client.py
index 8ad8e0d5fe3..0d4f59af69d 100644
--- a/python/test/Ice/admin/Client.py
+++ b/python/test/Ice/admin/Client.py
@@ -28,13 +28,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/admin/Server.py b/python/test/Ice/admin/Server.py
index 50b762fc9ec..90acf7530a3 100644
--- a/python/test/Ice/admin/Server.py
+++ b/python/test/Ice/admin/Server.py
@@ -30,13 +30,10 @@ def run(args, communicator):
return True;
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/ami/Client.py b/python/test/Ice/ami/Client.py
index d3a0275ffe2..1966ff4bd6d 100755
--- a/python/test/Ice/ami/Client.py
+++ b/python/test/Ice/ami/Client.py
@@ -40,13 +40,10 @@ try:
#
initData.properties.setProperty("Ice.TCP.SndSize", "50000");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/ami/Collocated.py b/python/test/Ice/ami/Collocated.py
index 8336b26a3d9..060bf5b4c52 100755
--- a/python/test/Ice/ami/Collocated.py
+++ b/python/test/Ice/ami/Collocated.py
@@ -50,13 +50,10 @@ try:
#
initData.properties.setProperty("Ice.Warn.Connections", "0");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/ami/Server.py b/python/test/Ice/ami/Server.py
index c98543c93b2..1872276ecb0 100755
--- a/python/test/Ice/ami/Server.py
+++ b/python/test/Ice/ami/Server.py
@@ -52,13 +52,10 @@ try:
#
initData.properties.setProperty("Ice.TCP.RcvSize", "50000");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/binding/Client.py b/python/test/Ice/binding/Client.py
index c702a3752da..7aff07d049c 100755
--- a/python/test/Ice/binding/Client.py
+++ b/python/test/Ice/binding/Client.py
@@ -20,13 +20,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/binding/Server.py b/python/test/Ice/binding/Server.py
index 5cfa8e9a7df..623afa99954 100755
--- a/python/test/Ice/binding/Server.py
+++ b/python/test/Ice/binding/Server.py
@@ -25,13 +25,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/blobject/Client.py b/python/test/Ice/blobject/Client.py
index ce25b994c8c..43d6be41f50 100755
--- a/python/test/Ice/blobject/Client.py
+++ b/python/test/Ice/blobject/Client.py
@@ -52,41 +52,31 @@ try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(argv)
initData.properties.setProperty('Ice.Warn.Dispatch', '0')
- communicator = Ice.initialize(argv, initData)
- router = RouterI.RouterI(communicator, False)
- sys.stdout.write("testing async blobject... ")
- sys.stdout.flush()
- status = run(sys.argv, communicator, False)
- print("ok")
- router.destroy()
+ with Ice.initialize(argv, initData) as communicator:
+ router = RouterI.RouterI(communicator, False)
+ sys.stdout.write("testing async blobject... ")
+ sys.stdout.flush()
+ status = run(sys.argv, communicator, False)
+ print("ok")
+ router.destroy()
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
if status:
try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty('Ice.Warn.Dispatch', '0')
- communicator = Ice.initialize(sys.argv, initData)
- router = RouterI.RouterI(communicator, True)
- sys.stdout.write("testing sync blobject... ")
- sys.stdout.flush()
- status = run(sys.argv, communicator, True)
- print("ok")
- router.destroy()
+ with Ice.initialize(sys.argv, initData) as communicator:
+ router = RouterI.RouterI(communicator, True)
+ sys.stdout.write("testing sync blobject... ")
+ sys.stdout.flush()
+ status = run(sys.argv, communicator, True)
+ print("ok")
+ router.destroy()
except:
traceback.print_exc()
status = False
- if communicator:
- try:
- communicator.destroy()
- except:
- traceback.print_exc()
- status = False
-
sys.exit(not status)
diff --git a/python/test/Ice/blobject/Server.py b/python/test/Ice/blobject/Server.py
index cd02c163c36..ad6d43b5b9f 100755
--- a/python/test/Ice/blobject/Server.py
+++ b/python/test/Ice/blobject/Server.py
@@ -47,13 +47,10 @@ try:
# this warning.
#
initData.properties.setProperty("Ice.Warn.Dispatch", "0");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/checksum/Client.py b/python/test/Ice/checksum/Client.py
index ac14ef4820a..fc8e6a1de9c 100755
--- a/python/test/Ice/checksum/Client.py
+++ b/python/test/Ice/checksum/Client.py
@@ -25,13 +25,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/checksum/Server.py b/python/test/Ice/checksum/Server.py
index 990de16608e..6b1ae945fad 100755
--- a/python/test/Ice/checksum/Server.py
+++ b/python/test/Ice/checksum/Server.py
@@ -36,13 +36,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/custom/Client.py b/python/test/Ice/custom/Client.py
index 31d6c9f0d7c..377c310b823 100755
--- a/python/test/Ice/custom/Client.py
+++ b/python/test/Ice/custom/Client.py
@@ -20,13 +20,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/custom/Server.py b/python/test/Ice/custom/Server.py
index 0c118c80344..49c830c1ace 100755
--- a/python/test/Ice/custom/Server.py
+++ b/python/test/Ice/custom/Server.py
@@ -99,13 +99,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/defaultServant/Client.py b/python/test/Ice/defaultServant/Client.py
index c702a3752da..7aff07d049c 100755
--- a/python/test/Ice/defaultServant/Client.py
+++ b/python/test/Ice/defaultServant/Client.py
@@ -20,13 +20,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/enums/Client.py b/python/test/Ice/enums/Client.py
index cc50301dbf1..8033ba44588 100755
--- a/python/test/Ice/enums/Client.py
+++ b/python/test/Ice/enums/Client.py
@@ -20,13 +20,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/enums/Server.py b/python/test/Ice/enums/Server.py
index 299e1196301..bdb7a4357d3 100755
--- a/python/test/Ice/enums/Server.py
+++ b/python/test/Ice/enums/Server.py
@@ -56,13 +56,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/exceptions/Client.py b/python/test/Ice/exceptions/Client.py
index a721c09b5e5..2a2a9ddbcb4 100755
--- a/python/test/Ice/exceptions/Client.py
+++ b/python/test/Ice/exceptions/Client.py
@@ -29,13 +29,10 @@ try:
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty("Ice.MessageSizeMax", "10")
initData.properties.setProperty("Ice.Warn.Connections", "0");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/exceptions/Collocated.py b/python/test/Ice/exceptions/Collocated.py
index 555805a08db..b0345cbc7d7 100755
--- a/python/test/Ice/exceptions/Collocated.py
+++ b/python/test/Ice/exceptions/Collocated.py
@@ -36,13 +36,10 @@ try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty("Ice.MessageSizeMax", "10")
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/exceptions/Server.py b/python/test/Ice/exceptions/Server.py
index 3cb70a97161..018adf04c93 100755
--- a/python/test/Ice/exceptions/Server.py
+++ b/python/test/Ice/exceptions/Server.py
@@ -44,13 +44,10 @@ try:
initData.properties.setProperty("TestAdapter2.MessageSizeMax", "0")
initData.properties.setProperty("TestAdapter3.Endpoints", "default -p 12012")
initData.properties.setProperty("TestAdapter3.MessageSizeMax", "1")
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/exceptions/ServerAMD.py b/python/test/Ice/exceptions/ServerAMD.py
index 999a41115c8..04e28fdf8d0 100755
--- a/python/test/Ice/exceptions/ServerAMD.py
+++ b/python/test/Ice/exceptions/ServerAMD.py
@@ -175,13 +175,10 @@ try:
initData.properties.setProperty("TestAdapter2.MessageSizeMax", "0")
initData.properties.setProperty("TestAdapter3.Endpoints", "default -p 12012")
initData.properties.setProperty("TestAdapter3.MessageSizeMax", "1")
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/facets/Client.py b/python/test/Ice/facets/Client.py
index 07b46c03e43..cf0d5394643 100755
--- a/python/test/Ice/facets/Client.py
+++ b/python/test/Ice/facets/Client.py
@@ -21,13 +21,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/facets/Collocated.py b/python/test/Ice/facets/Collocated.py
index 7b0734c6801..47844d24114 100755
--- a/python/test/Ice/facets/Collocated.py
+++ b/python/test/Ice/facets/Collocated.py
@@ -32,13 +32,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/facets/Server.py b/python/test/Ice/facets/Server.py
index 293b1a24bdc..89871e1feb5 100755
--- a/python/test/Ice/facets/Server.py
+++ b/python/test/Ice/facets/Server.py
@@ -31,13 +31,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/faultTolerance/Client.py b/python/test/Ice/faultTolerance/Client.py
index 2148c01553b..2284d80f979 100755
--- a/python/test/Ice/faultTolerance/Client.py
+++ b/python/test/Ice/faultTolerance/Client.py
@@ -51,13 +51,10 @@ try:
#
initData.properties.setProperty('Ice.Warn.Connections', '0')
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/faultTolerance/Server.py b/python/test/Ice/faultTolerance/Server.py
index 6185f4e23ac..d5545bd1000 100755
--- a/python/test/Ice/faultTolerance/Server.py
+++ b/python/test/Ice/faultTolerance/Server.py
@@ -69,13 +69,10 @@ try:
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty("Ice.ServerIdleTime", "120") # Two minutes.
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/info/Client.py b/python/test/Ice/info/Client.py
index 8d395d34d36..cb2771d86ba 100755
--- a/python/test/Ice/info/Client.py
+++ b/python/test/Ice/info/Client.py
@@ -30,13 +30,10 @@ def run(args, communicator):
try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/info/Server.py b/python/test/Ice/info/Server.py
index 63dfac1ebd0..3a5ade3c048 100755
--- a/python/test/Ice/info/Server.py
+++ b/python/test/Ice/info/Server.py
@@ -30,13 +30,10 @@ def run(args, communicator):
try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/inheritance/Client.py b/python/test/Ice/inheritance/Client.py
index 5d978d0bb61..e095ce7f61c 100755
--- a/python/test/Ice/inheritance/Client.py
+++ b/python/test/Ice/inheritance/Client.py
@@ -20,13 +20,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/inheritance/Collocated.py b/python/test/Ice/inheritance/Collocated.py
index 5fd18d1b4c6..22552fc8565 100755
--- a/python/test/Ice/inheritance/Collocated.py
+++ b/python/test/Ice/inheritance/Collocated.py
@@ -26,13 +26,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/inheritance/Server.py b/python/test/Ice/inheritance/Server.py
index 027ff3b5e80..c00f6ec3813 100755
--- a/python/test/Ice/inheritance/Server.py
+++ b/python/test/Ice/inheritance/Server.py
@@ -24,13 +24,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/location/Client.py b/python/test/Ice/location/Client.py
index 71418f137a6..2dc7cf6597b 100755
--- a/python/test/Ice/location/Client.py
+++ b/python/test/Ice/location/Client.py
@@ -31,13 +31,10 @@ try:
data = Ice.InitializationData()
data.properties = Ice.createProperties(sys.argv)
data.properties.setProperty("Ice.Default.Locator", "locator:default -p 12010")
- communicator = Ice.initialize(sys.argv, data)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, data) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/location/Server.py b/python/test/Ice/location/Server.py
index 00e91ef3f47..124407f3588 100755
--- a/python/test/Ice/location/Server.py
+++ b/python/test/Ice/location/Server.py
@@ -183,13 +183,10 @@ def run(args, communicator, initData):
try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator, initData)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator, initData)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/objects/Client.py b/python/test/Ice/objects/Client.py
index 6cd16ce186d..00d366ff9e3 100755
--- a/python/test/Ice/objects/Client.py
+++ b/python/test/Ice/objects/Client.py
@@ -21,13 +21,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/objects/Collocated.py b/python/test/Ice/objects/Collocated.py
index ca2c54b22bc..8a9fd789eb8 100755
--- a/python/test/Ice/objects/Collocated.py
+++ b/python/test/Ice/objects/Collocated.py
@@ -32,13 +32,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/objects/Server.py b/python/test/Ice/objects/Server.py
index b986603ccdf..4810fefa5b9 100755
--- a/python/test/Ice/objects/Server.py
+++ b/python/test/Ice/objects/Server.py
@@ -40,13 +40,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/operations/Client.py b/python/test/Ice/operations/Client.py
index 2815874b243..6bcc4502d00 100755
--- a/python/test/Ice/operations/Client.py
+++ b/python/test/Ice/operations/Client.py
@@ -49,13 +49,10 @@ try:
initData.properties.setProperty('Ice.ThreadPool.Client.SizeWarn', '0')
initData.properties.setProperty("Ice.BatchAutoFlushSize", "100")
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/operations/Collocated.py b/python/test/Ice/operations/Collocated.py
index 02d35848c0c..a8240de89e8 100755
--- a/python/test/Ice/operations/Collocated.py
+++ b/python/test/Ice/operations/Collocated.py
@@ -38,13 +38,10 @@ try:
initData.properties.setProperty("Ice.BatchAutoFlushSize", "100")
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/operations/Server.py b/python/test/Ice/operations/Server.py
index 6a0dc70da53..c2f68be89c0 100755
--- a/python/test/Ice/operations/Server.py
+++ b/python/test/Ice/operations/Server.py
@@ -35,13 +35,10 @@ try:
# this warning.
#
initData.properties.setProperty("Ice.Warn.Dispatch", "0");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/operations/ServerAMD.py b/python/test/Ice/operations/ServerAMD.py
index cc950bb90ec..c603b9264b8 100755
--- a/python/test/Ice/operations/ServerAMD.py
+++ b/python/test/Ice/operations/ServerAMD.py
@@ -455,13 +455,10 @@ try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty("Ice.Warn.Dispatch", "0");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/optional/Client.py b/python/test/Ice/optional/Client.py
index 3ebef40e6be..98b80f445ee 100755
--- a/python/test/Ice/optional/Client.py
+++ b/python/test/Ice/optional/Client.py
@@ -20,13 +20,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/optional/Server.py b/python/test/Ice/optional/Server.py
index c9182ac46a7..75843937efa 100755
--- a/python/test/Ice/optional/Server.py
+++ b/python/test/Ice/optional/Server.py
@@ -197,13 +197,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/optional/ServerAMD.py b/python/test/Ice/optional/ServerAMD.py
index 65f84d2f269..1659377060a 100755
--- a/python/test/Ice/optional/ServerAMD.py
+++ b/python/test/Ice/optional/ServerAMD.py
@@ -203,13 +203,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/proxy/Client.py b/python/test/Ice/proxy/Client.py
index 027a6eb070a..8b73fb8a670 100755
--- a/python/test/Ice/proxy/Client.py
+++ b/python/test/Ice/proxy/Client.py
@@ -32,13 +32,10 @@ def run(args, communicator):
try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/proxy/Collocated.py b/python/test/Ice/proxy/Collocated.py
index bc240b8fc26..48f74175880 100755
--- a/python/test/Ice/proxy/Collocated.py
+++ b/python/test/Ice/proxy/Collocated.py
@@ -32,13 +32,10 @@ def run(args, communicator):
try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/proxy/Server.py b/python/test/Ice/proxy/Server.py
index 4d2826e43a0..eb9dc15f064 100755
--- a/python/test/Ice/proxy/Server.py
+++ b/python/test/Ice/proxy/Server.py
@@ -32,13 +32,10 @@ try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty("Ice.Warn.Dispatch", "0")
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/proxy/ServerAMD.py b/python/test/Ice/proxy/ServerAMD.py
index 00a109ef7db..7cbc59a5662 100755
--- a/python/test/Ice/proxy/ServerAMD.py
+++ b/python/test/Ice/proxy/ServerAMD.py
@@ -49,13 +49,10 @@ try:
initData.properties = Ice.createProperties(sys.argv)
initData.properties.setProperty("Ice.Warn.Connections", "0")
initData.properties.setProperty("Ice.Warn.Dispatch", "0")
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/slicing/exceptions/Client.py b/python/test/Ice/slicing/exceptions/Client.py
index ef47308a897..9e7c832f104 100755
--- a/python/test/Ice/slicing/exceptions/Client.py
+++ b/python/test/Ice/slicing/exceptions/Client.py
@@ -18,13 +18,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/slicing/exceptions/Server.py b/python/test/Ice/slicing/exceptions/Server.py
index d77acfcccca..e31ccced5e8 100755
--- a/python/test/Ice/slicing/exceptions/Server.py
+++ b/python/test/Ice/slicing/exceptions/Server.py
@@ -163,13 +163,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/slicing/exceptions/ServerAMD.py b/python/test/Ice/slicing/exceptions/ServerAMD.py
index 8e821636a60..00a915508e3 100755
--- a/python/test/Ice/slicing/exceptions/ServerAMD.py
+++ b/python/test/Ice/slicing/exceptions/ServerAMD.py
@@ -224,13 +224,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/slicing/objects/Client.py b/python/test/Ice/slicing/objects/Client.py
index ef47308a897..9e7c832f104 100755
--- a/python/test/Ice/slicing/objects/Client.py
+++ b/python/test/Ice/slicing/objects/Client.py
@@ -18,13 +18,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/slicing/objects/Server.py b/python/test/Ice/slicing/objects/Server.py
index a8048d2bf8d..b17c73b57d7 100755
--- a/python/test/Ice/slicing/objects/Server.py
+++ b/python/test/Ice/slicing/objects/Server.py
@@ -376,13 +376,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/slicing/objects/ServerAMD.py b/python/test/Ice/slicing/objects/ServerAMD.py
index 1f925613b6b..1839a9f6480 100755
--- a/python/test/Ice/slicing/objects/ServerAMD.py
+++ b/python/test/Ice/slicing/objects/ServerAMD.py
@@ -412,13 +412,10 @@ def run(args, communicator):
return True
try:
- communicator = Ice.initialize(sys.argv)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/timeout/Client.py b/python/test/Ice/timeout/Client.py
index f6695090351..343420bc121 100755
--- a/python/test/Ice/timeout/Client.py
+++ b/python/test/Ice/timeout/Client.py
@@ -58,13 +58,10 @@ try:
#
initData.properties.setProperty("Ice.TCP.SndSize", "50000");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Ice/timeout/Server.py b/python/test/Ice/timeout/Server.py
index d607016e64e..413a85b834a 100755
--- a/python/test/Ice/timeout/Server.py
+++ b/python/test/Ice/timeout/Server.py
@@ -65,13 +65,10 @@ try:
# send() blocking after sending a given amount of data.
#
initData.properties.setProperty("Ice.TCP.RcvSize", "50000");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Slice/escape/Client.py b/python/test/Slice/escape/Client.py
index 6305365602a..882e9739329 100755
--- a/python/test/Slice/escape/Client.py
+++ b/python/test/Slice/escape/Client.py
@@ -104,13 +104,10 @@ try:
# this warning.
#
initData.properties.setProperty("Ice.Warn.Dispatch", "0");
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/python/test/Slice/structure/Client.py b/python/test/Slice/structure/Client.py
index ee963021e65..ded72abdf7b 100755
--- a/python/test/Slice/structure/Client.py
+++ b/python/test/Slice/structure/Client.py
@@ -195,13 +195,10 @@ def run(args, communicator):
try:
initData = Ice.InitializationData()
initData.properties = Ice.createProperties(sys.argv)
- communicator = Ice.initialize(sys.argv, initData)
- status = run(sys.argv, communicator)
+ with Ice.initialize(sys.argv, initData) as communicator:
+ status = run(sys.argv, communicator)
except:
traceback.print_exc()
status = False
-if communicator:
- communicator.destroy()
-
sys.exit(not status)
diff --git a/slice/Ice/Communicator.ice b/slice/Ice/Communicator.ice
index 13340562e06..49821037313 100644
--- a/slice/Ice/Communicator.ice
+++ b/slice/Ice/Communicator.ice
@@ -54,7 +54,7 @@ module Ice
* @see ValueFactory
*
**/
-["clr:implements:_System.IDisposable", "php:internal"]
+["clr:implements:_System.IDisposable", "java:implements:java.lang.AutoCloseable", "php:internal"]
local interface Communicator
{
/**