diff options
9 files changed, 64 insertions, 16 deletions
diff --git a/cpp/src/IceDiscovery/PluginI.cpp b/cpp/src/IceDiscovery/PluginI.cpp index 37992bdab35..1a76f34ff06 100644 --- a/cpp/src/IceDiscovery/PluginI.cpp +++ b/cpp/src/IceDiscovery/PluginI.cpp @@ -148,7 +148,8 @@ PluginI::initialize() // Ice::ObjectPrxPtr loc = _locatorAdapter->addWithUUID(ICE_MAKE_SHARED(LocatorI, _lookup, locatorRegistryPrx)); _defaultLocator = _communicator->getDefaultLocator(); - _communicator->setDefaultLocator(ICE_UNCHECKED_CAST(Ice::LocatorPrx, loc)); + _locator = ICE_UNCHECKED_CAST(Ice::LocatorPrx, loc); + _communicator->setDefaultLocator(_locator); _multicastAdapter->activate(); _replyAdapter->activate(); @@ -162,5 +163,9 @@ PluginI::destroy() _replyAdapter->destroy(); _locatorAdapter->destroy(); _lookup->destroy(); - _communicator->setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime. + if(_communicator->getDefaultLocator() == _locator) + { + _communicator->setDefaultLocator(_defaultLocator); + } } diff --git a/cpp/src/IceDiscovery/PluginI.h b/cpp/src/IceDiscovery/PluginI.h index e8503667b1b..cd565b637e5 100644 --- a/cpp/src/IceDiscovery/PluginI.h +++ b/cpp/src/IceDiscovery/PluginI.h @@ -32,6 +32,7 @@ private: Ice::ObjectAdapterPtr _replyAdapter; Ice::ObjectAdapterPtr _locatorAdapter; LookupIPtr _lookup; + Ice::LocatorPrxPtr _locator; Ice::LocatorPrxPtr _defaultLocator; }; diff --git a/cpp/src/IceLocatorDiscovery/PluginI.cpp b/cpp/src/IceLocatorDiscovery/PluginI.cpp index 34c23efc01b..7a32c20a844 100644 --- a/cpp/src/IceLocatorDiscovery/PluginI.cpp +++ b/cpp/src/IceLocatorDiscovery/PluginI.cpp @@ -225,6 +225,7 @@ private: Ice::ObjectAdapterPtr _locatorAdapter; Ice::ObjectAdapterPtr _replyAdapter; LocatorIPtr _locator; + Ice::LocatorPrxPtr _locatorPrx; Ice::LocatorPrxPtr _defaultLocator; }; @@ -334,7 +335,8 @@ PluginI::initialize() _locator = ICE_MAKE_SHARED(LocatorI, _name, ICE_UNCHECKED_CAST(LookupPrx, lookupPrx), properties, instanceName, voidLocator); _defaultLocator = _communicator->getDefaultLocator(); - _communicator->setDefaultLocator(ICE_UNCHECKED_CAST(Ice::LocatorPrx, _locatorAdapter->add(_locator, id))); + _locatorPrx = ICE_UNCHECKED_CAST(Ice::LocatorPrx, _locatorAdapter->add(_locator, id)); + _communicator->setDefaultLocator(_locatorPrx); Ice::ObjectPrxPtr lookupReply = _replyAdapter->addWithUUID(ICE_MAKE_SHARED(LookupReplyI, _locator))->ice_datagram(); _locator->setLookupReply(ICE_UNCHECKED_CAST(LookupReplyPrx, lookupReply)); @@ -354,7 +356,11 @@ PluginI::destroy() { _replyAdapter->destroy(); _locatorAdapter->destroy(); - _communicator->setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime + if(_communicator->getDefaultLocator() == _locatorPrx) + { + _communicator->setDefaultLocator(_defaultLocator); + } } void diff --git a/csharp/src/IceDiscovery/PluginI.cs b/csharp/src/IceDiscovery/PluginI.cs index f2e877569ad..f39e13a3939 100644 --- a/csharp/src/IceDiscovery/PluginI.cs +++ b/csharp/src/IceDiscovery/PluginI.cs @@ -114,7 +114,8 @@ namespace IceDiscovery loc = _locatorAdapter.addWithUUID( new LocatorI(lookup, Ice.LocatorRegistryPrxHelper.uncheckedCast(locatorRegistryPrx))); _defaultLocator = _communicator.getDefaultLocator(); - _communicator.setDefaultLocator(Ice.LocatorPrxHelper.uncheckedCast(loc)); + _locator = Ice.LocatorPrxHelper.uncheckedCast(loc); + _communicator.setDefaultLocator(_locator); _multicastAdapter.activate(); _replyAdapter.activate(); @@ -126,13 +127,18 @@ namespace IceDiscovery _multicastAdapter.destroy(); _replyAdapter.destroy(); _locatorAdapter.destroy(); - _communicator.setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime + if(_communicator.getDefaultLocator().Equals(_locator)) + { + _communicator.setDefaultLocator(_defaultLocator); + } } private Ice.Communicator _communicator; private Ice.ObjectAdapter _multicastAdapter; private Ice.ObjectAdapter _replyAdapter; private Ice.ObjectAdapter _locatorAdapter; + private Ice.LocatorPrx _locator; private Ice.LocatorPrx _defaultLocator; } diff --git a/csharp/src/IceLocatorDiscovery/PluginI.cs b/csharp/src/IceLocatorDiscovery/PluginI.cs index 259ac68622f..2a55fe8d4cc 100644 --- a/csharp/src/IceLocatorDiscovery/PluginI.cs +++ b/csharp/src/IceLocatorDiscovery/PluginI.cs @@ -565,7 +565,8 @@ namespace IceLocatorDiscovery _defaultLocator = _communicator.getDefaultLocator(); _locator = new LocatorI(_name, LookupPrxHelper.uncheckedCast(lookupPrx), properties, instanceName, voidLo); - _communicator.setDefaultLocator(Ice.LocatorPrxHelper.uncheckedCast(_locatorAdapter.addWithUUID(_locator))); + _locatorPrx = Ice.LocatorPrxHelper.uncheckedCast(_locatorAdapter.addWithUUID(_locator)); + _communicator.setDefaultLocator(_locatorPrx); Ice.ObjectPrx lookupReply = _replyAdapter.addWithUUID(new LookupReplyI(_locator)).ice_datagram(); _locator.setLookupReply(LookupReplyPrxHelper.uncheckedCast(lookupReply)); @@ -579,7 +580,11 @@ namespace IceLocatorDiscovery { _replyAdapter.destroy(); _locatorAdapter.destroy(); - _communicator.setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime + if(_communicator.getDefaultLocator().Equals(_locatorPrx)) + { + _communicator.setDefaultLocator(_defaultLocator); + } } List<Ice.LocatorPrx> @@ -593,6 +598,7 @@ namespace IceLocatorDiscovery private Ice.ObjectAdapter _locatorAdapter; private Ice.ObjectAdapter _replyAdapter; private LocatorI _locator; + private Ice.LocatorPrx _locatorPrx; private Ice.LocatorPrx _defaultLocator; } } diff --git a/java-compat/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java b/java-compat/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java index bd8f1007fe5..748a2ae83a8 100644 --- a/java-compat/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java +++ b/java-compat/src/IceDiscovery/src/main/java/IceDiscovery/PluginI.java @@ -102,7 +102,8 @@ public class PluginI implements Ice.Plugin // Ice.ObjectPrx locator = _locatorAdapter.addWithUUID(new LocatorI(lookup, locatorRegistryPrx)); _defaultLocator = _communicator.getDefaultLocator(); - _communicator.setDefaultLocator(Ice.LocatorPrxHelper.uncheckedCast(locator)); + _locator = Ice.LocatorPrxHelper.uncheckedCast(locator); + _communicator.setDefaultLocator(_locator); _multicastAdapter.activate(); _replyAdapter.activate(); @@ -116,12 +117,17 @@ public class PluginI implements Ice.Plugin _multicastAdapter.destroy(); _replyAdapter.destroy(); _locatorAdapter.destroy(); - _communicator.setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime + if(_communicator.getDefaultLocator().equals(_locator)) + { + _communicator.setDefaultLocator(_defaultLocator); + } } private Ice.Communicator _communicator; private Ice.ObjectAdapter _multicastAdapter; private Ice.ObjectAdapter _replyAdapter; private Ice.ObjectAdapter _locatorAdapter; + private Ice.LocatorPrx _locator; private Ice.LocatorPrx _defaultLocator; } diff --git a/java-compat/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java b/java-compat/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java index 2ee4d3b1d1d..2b49d63747d 100644 --- a/java-compat/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java +++ b/java-compat/src/IceLocatorDiscovery/src/main/java/IceLocatorDiscovery/PluginI.java @@ -562,7 +562,8 @@ class PluginI implements Plugin id.category = !instanceName.isEmpty() ? instanceName : java.util.UUID.randomUUID().toString(); _locator = new LocatorI(_name, LookupPrxHelper.uncheckedCast(lookupPrx), properties, instanceName, voidLoc); _defaultLocator = _communicator.getDefaultLocator(); - _communicator.setDefaultLocator(Ice.LocatorPrxHelper.uncheckedCast(_locatorAdapter.addWithUUID(_locator))); + _locatorPrx = Ice.LocatorPrxHelper.uncheckedCast(_locatorAdapter.addWithUUID(_locator)); + _communicator.setDefaultLocator(_locatorPrx); Ice.ObjectPrx lookupReply = _replyAdapter.addWithUUID(new LookupReplyI(_locator)).ice_datagram(); _locator.setLookupReply(LookupReplyPrxHelper.uncheckedCast(lookupReply)); @@ -577,7 +578,11 @@ class PluginI implements Plugin { _replyAdapter.destroy(); _locatorAdapter.destroy(); - _communicator.setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime + if(_communicator.getDefaultLocator().equals(_locatorPrx)) + { + _communicator.setDefaultLocator(_defaultLocator); + } } @Override @@ -592,5 +597,6 @@ class PluginI implements Plugin private Ice.ObjectAdapter _locatorAdapter; private Ice.ObjectAdapter _replyAdapter; private LocatorI _locator; + private Ice.LocatorPrx _locatorPrx; private Ice.LocatorPrx _defaultLocator; } diff --git a/java/src/IceDiscovery/src/main/java/com/zeroc/IceDiscovery/PluginI.java b/java/src/IceDiscovery/src/main/java/com/zeroc/IceDiscovery/PluginI.java index 0f5cbc9806d..bc115950f2d 100644 --- a/java/src/IceDiscovery/src/main/java/com/zeroc/IceDiscovery/PluginI.java +++ b/java/src/IceDiscovery/src/main/java/com/zeroc/IceDiscovery/PluginI.java @@ -102,7 +102,8 @@ public class PluginI implements com.zeroc.Ice.Plugin // com.zeroc.Ice.ObjectPrx locator = _locatorAdapter.addWithUUID(new LocatorI(lookup, locatorRegistryPrx)); _defaultLocator = _communicator.getDefaultLocator(); - _communicator.setDefaultLocator(com.zeroc.Ice.LocatorPrx.uncheckedCast(locator)); + _locator = com.zeroc.Ice.LocatorPrx.uncheckedCast(locator); + _communicator.setDefaultLocator(_locator); _multicastAdapter.activate(); _replyAdapter.activate(); @@ -115,12 +116,17 @@ public class PluginI implements com.zeroc.Ice.Plugin _multicastAdapter.destroy(); _replyAdapter.destroy(); _locatorAdapter.destroy(); - _communicator.setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime + if(_communicator.getDefaultLocator().equals(_locator)) + { + _communicator.setDefaultLocator(_defaultLocator); + } } private com.zeroc.Ice.Communicator _communicator; private com.zeroc.Ice.ObjectAdapter _multicastAdapter; private com.zeroc.Ice.ObjectAdapter _replyAdapter; private com.zeroc.Ice.ObjectAdapter _locatorAdapter; + private com.zeroc.Ice.LocatorPrx _locator; private com.zeroc.Ice.LocatorPrx _defaultLocator; } diff --git a/java/src/IceLocatorDiscovery/src/main/java/com/zeroc/IceLocatorDiscovery/PluginI.java b/java/src/IceLocatorDiscovery/src/main/java/com/zeroc/IceLocatorDiscovery/PluginI.java index 3251babc78a..61dd6f7cca1 100644 --- a/java/src/IceLocatorDiscovery/src/main/java/com/zeroc/IceLocatorDiscovery/PluginI.java +++ b/java/src/IceLocatorDiscovery/src/main/java/com/zeroc/IceLocatorDiscovery/PluginI.java @@ -559,7 +559,8 @@ class PluginI implements Plugin id.category = !instanceName.isEmpty() ? instanceName : java.util.UUID.randomUUID().toString(); _locator = new LocatorI(_name, LookupPrx.uncheckedCast(lookupPrx), properties, instanceName, voidLoc); _defaultLocator = _communicator.getDefaultLocator(); - _communicator.setDefaultLocator(com.zeroc.Ice.LocatorPrx.uncheckedCast(_locatorAdapter.addWithUUID(_locator))); + _locatorPrx = com.zeroc.Ice.LocatorPrx.uncheckedCast(_locatorAdapter.addWithUUID(_locator)); + _communicator.setDefaultLocator(_locatorPrx); com.zeroc.Ice.ObjectPrx lookupReply = _replyAdapter.addWithUUID(new LookupReplyI(_locator)).ice_datagram(); _locator.setLookupReply(LookupReplyPrx.uncheckedCast(lookupReply)); @@ -573,7 +574,11 @@ class PluginI implements Plugin { _replyAdapter.destroy(); _locatorAdapter.destroy(); - _communicator.setDefaultLocator(_defaultLocator); + // Restore original default locator proxy, if the user didn't change it in the meantime + if(_communicator.getDefaultLocator().equals(_locatorPrx)) + { + _communicator.setDefaultLocator(_defaultLocator); + } } public List<com.zeroc.Ice.LocatorPrx> @@ -587,5 +592,6 @@ class PluginI implements Plugin private com.zeroc.Ice.ObjectAdapter _locatorAdapter; private com.zeroc.Ice.ObjectAdapter _replyAdapter; private LocatorI _locator; + private com.zeroc.Ice.LocatorPrx _locatorPrx; private com.zeroc.Ice.LocatorPrx _defaultLocator; } |