public override void run(string[] args) { #if NET45 string pluginPath = "msbuild/plugin/net45/Plugin.dll"; #elif NET5_0 string pluginPath = "msbuild/plugin/net5.0/Plugin.dll"; #else string pluginPath = String.Format("msbuild/plugin/netstandard2.0/{0}/Plugin.dll", Path.GetFileName(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase))); #endif { Console.Write("testing a simple plug-in... "); Console.Out.Flush(); Ice.Properties properties = Ice.Util.createProperties(); properties.setProperty("Ice.Plugin.Test", pluginPath + ":PluginFactory 'C:\\Program Files\\' --DatabasePath " + "'C:\\Program Files\\Application\\db'"); using (var communicator = initialize(properties)) { } Console.WriteLine("ok"); } { Console.Write("testing a simple plug-in that fails to initialize... "); Console.Out.Flush(); try { Ice.Properties properties = Ice.Util.createProperties(); properties.setProperty("Ice.Plugin.Test", pluginPath + ":PluginInitializeFailFactory"); initialize(properties); test(false); } catch (Ice.PluginInitializationException ex) { test(ex.InnerException.Message.Equals("PluginInitializeFailException")); } Console.WriteLine("ok"); } { Console.Write("testing plug-in load order... "); Console.Out.Flush(); Ice.Properties properties = Ice.Util.createProperties(); properties.setProperty("Ice.Plugin.PluginOne", pluginPath + ":PluginOneFactory"); properties.setProperty("Ice.Plugin.PluginTwo", pluginPath + ":PluginTwoFactory"); properties.setProperty("Ice.Plugin.PluginThree", pluginPath + ":PluginThreeFactory"); properties.setProperty("Ice.PluginLoadOrder", "PluginOne, PluginTwo"); // Exclude PluginThree using (var communicator = initialize(properties)) { } Console.WriteLine("ok"); } { Console.Write("testing plug-in manager... "); Console.Out.Flush(); Ice.Properties properties = Ice.Util.createProperties(); properties.setProperty("Ice.Plugin.PluginOne", pluginPath + ":PluginOneFactory"); properties.setProperty("Ice.Plugin.PluginTwo", pluginPath + ":PluginTwoFactory"); properties.setProperty("Ice.Plugin.PluginThree", pluginPath + ":PluginThreeFactory"); properties.setProperty("Ice.Plugin.PluginThree", pluginPath + ":PluginThreeFactory"); properties.setProperty("Ice.InitPlugins", "0"); MyPlugin p4 = null; using (var communicator = initialize(properties)) { Ice.PluginManager pm = communicator.getPluginManager(); test(pm.getPlugin("PluginOne") != null); test(pm.getPlugin("PluginTwo") != null); test(pm.getPlugin("PluginThree") != null); p4 = new MyPlugin(); pm.addPlugin("PluginFour", p4); test(pm.getPlugin("PluginFour") != null); pm.initializePlugins(); test(p4.isInitialized()); } test(p4.isDestroyed()); Console.WriteLine("ok"); } { Console.Write("testing destroy when a plug-in fails to initialize... "); Console.Out.Flush(); try { Ice.Properties properties = Ice.Util.createProperties(); properties.setProperty("Ice.Plugin.PluginOneFail", pluginPath + ":PluginOneFailFactory"); properties.setProperty("Ice.Plugin.PluginTwoFail", pluginPath + ":PluginTwoFailFactory"); properties.setProperty("Ice.Plugin.PluginThreeFail", pluginPath + ":PluginThreeFailFactory"); properties.setProperty("Ice.PluginLoadOrder", "PluginOneFail, PluginTwoFail, PluginThreeFail"); initialize(properties); } catch (Ice.PluginInitializationException ex) { test(ex.InnerException.Message.Equals("PluginInitializeFailException")); } Console.WriteLine("ok"); } }
private TraceLevels _traceLevels; // Immutable, not reset by destroy(). #endregion Fields #region Constructors // // Only for use by Ice.CommunicatorI // public Instance(Ice.Communicator communicator, Ice.InitializationData initData) { _state = StateActive; _initData = initData; try { if(_initData.properties == null) { _initData.properties = Ice.Util.createProperties(); } lock(_staticLock) { if(!_oneOffDone) { string stdOut = _initData.properties.getProperty("Ice.StdOut"); string stdErr = _initData.properties.getProperty("Ice.StdErr"); System.IO.StreamWriter outStream = null; if(stdOut.Length > 0) { try { outStream = System.IO.File.AppendText(stdOut); } catch(System.IO.IOException ex) { Ice.FileException fe = new Ice.FileException(ex); fe.path = stdOut; throw fe; } outStream.AutoFlush = true; System.Console.Out.Close(); System.Console.SetOut(outStream); } if(stdErr.Length > 0) { if(stdErr.Equals(stdOut)) { System.Console.SetError(outStream); } else { System.IO.StreamWriter errStream = null; try { errStream = System.IO.File.AppendText(stdErr); } catch(System.IO.IOException ex) { Ice.FileException fe = new Ice.FileException(ex); fe.path = stdErr; throw fe; } errStream.AutoFlush = true; System.Console.Error.Close(); System.Console.SetError(errStream); } } _oneOffDone = true; } } if(_initData.logger == null) { string logfile = _initData.properties.getProperty("Ice.LogFile"); if(_initData.properties.getPropertyAsInt("Ice.UseSyslog") > 0 && AssemblyUtil.platform_ != AssemblyUtil.Platform.Windows) { if(logfile.Length != 0) { throw new Ice.InitializationException("Ice.LogFile and Ice.UseSyslog cannot both be set."); } _initData.logger = new Ice.SysLoggerI(_initData.properties.getProperty("Ice.ProgramName"), _initData.properties.getPropertyWithDefault("Ice.SyslogFacility", "LOG_USER")); } else if(logfile.Length != 0) { _initData.logger = new Ice.FileLoggerI(_initData.properties.getProperty("Ice.ProgramName"), logfile); } else if(Ice.Util.getProcessLogger() is Ice.LoggerI) { // // Ice.ConsoleListener is enabled by default. // bool console = _initData.properties.getPropertyAsIntWithDefault("Ice.ConsoleListener", 1) > 0; _initData.logger = new Ice.TraceLoggerI(_initData.properties.getProperty("Ice.ProgramName"), console); } if(Ice.Util.getProcessLogger() is Ice.LoggerI) { _initData.logger = new Ice.ConsoleLoggerI(_initData.properties.getProperty("Ice.ProgramName")); } else { _initData.logger = Ice.Util.getProcessLogger(); } } _traceLevels = new TraceLevels(_initData.properties); _defaultsAndOverrides = new DefaultsAndOverrides(_initData.properties, _initData.logger); _clientACM = new ACMConfig(_initData.properties, _initData.logger, "Ice.ACM.Client", new ACMConfig(_initData.properties, _initData.logger, "Ice.ACM", new ACMConfig(false))); _serverACM = new ACMConfig(_initData.properties, _initData.logger, "Ice.ACM.Server", new ACMConfig(_initData.properties, _initData.logger, "Ice.ACM", new ACMConfig(true))); { const int defaultMessageSizeMax = 1024; int num = _initData.properties.getPropertyAsIntWithDefault("Ice.MessageSizeMax", defaultMessageSizeMax); if(num < 1 || num > 0x7fffffff / 1024) { _messageSizeMax = 0x7fffffff; } else { _messageSizeMax = num * 1024; // Property is in kilobytes, _messageSizeMax in bytes } } if(_initData.properties.getProperty("Ice.BatchAutoFlushSize").Length == 0 && _initData.properties.getProperty("Ice.BatchAutoFlush").Length > 0) { if(_initData.properties.getPropertyAsInt("Ice.BatchAutoFlush") > 0) { _batchAutoFlushSize = _messageSizeMax; } } else { int num = _initData.properties.getPropertyAsIntWithDefault("Ice.BatchAutoFlushSize", 1024); // 1MB if(num < 1) { _batchAutoFlushSize = num; } else if(num > 0x7fffffff / 1024) { _batchAutoFlushSize = 0x7fffffff; } else { _batchAutoFlushSize = num * 1024; // Property is in kilobytes, _batchAutoFlushSize in bytes } } _cacheMessageBuffers = _initData.properties.getPropertyAsIntWithDefault("Ice.CacheMessageBuffers", 2); _implicitContext = Ice.ImplicitContextI.create(_initData.properties.getProperty("Ice.ImplicitContext")); _routerManager = new RouterManager(); _locatorManager = new LocatorManager(_initData.properties); _referenceFactory = new ReferenceFactory(this, communicator); _proxyFactory = new ProxyFactory(this); _requestHandlerFactory = new RequestHandlerFactory(this); bool isIPv6Supported = Network.isIPv6Supported(); bool ipv4 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0; bool ipv6 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv6", isIPv6Supported ? 1 : 0) > 0; if(!ipv4 && !ipv6) { throw new Ice.InitializationException("Both IPV4 and IPv6 support cannot be disabled."); } else if(ipv4 && ipv6) { _protocolSupport = Network.EnableBoth; } else if(ipv4) { _protocolSupport = Network.EnableIPv4; } else { _protocolSupport = Network.EnableIPv6; } _preferIPv6 = _initData.properties.getPropertyAsInt("Ice.PreferIPv6Address") > 0; _networkProxy = createNetworkProxy(_initData.properties, _protocolSupport); _endpointFactoryManager = new EndpointFactoryManager(this); ProtocolInstance tcpInstance = new ProtocolInstance(this, Ice.TCPEndpointType.value, "tcp", false); _endpointFactoryManager.add(new TcpEndpointFactory(tcpInstance)); ProtocolInstance udpInstance = new ProtocolInstance(this, Ice.UDPEndpointType.value, "udp", false); _endpointFactoryManager.add(new UdpEndpointFactory(udpInstance)); _pluginManager = new Ice.PluginManagerI(communicator); if(_initData.valueFactoryManager == null) { _initData.valueFactoryManager = new ValueFactoryManagerI(); } _outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this); _objectAdapterFactory = new ObjectAdapterFactory(this, communicator); _retryQueue = new RetryQueue(this); } catch(Ice.LocalException) { destroy(); throw; } }
// // Only for use by Ice.CommunicatorI // public void destroy() { lock(this) { // // If destroy is in progress, wait for it to be done. This // is necessary in case destroy() is called concurrently // by multiple threads. // while(_state == StateDestroyInProgress) { Monitor.Wait(this); } if(_state == StateDestroyed) { return; } _state = StateDestroyInProgress; } // // Shutdown and destroy all the incoming and outgoing Ice // connections and wait for the connections to be finished. // if(_objectAdapterFactory != null) { _objectAdapterFactory.shutdown(); } if(_outgoingConnectionFactory != null) { _outgoingConnectionFactory.destroy(); } if(_objectAdapterFactory != null) { _objectAdapterFactory.destroy(); } if(_outgoingConnectionFactory != null) { _outgoingConnectionFactory.waitUntilFinished(); } if(_retryQueue != null) { _retryQueue.destroy(); // Must be called before destroying thread pools. } if(_initData.observer != null) { _initData.observer.setObserverUpdater(null); } LoggerAdminLogger logger = _initData.logger as LoggerAdminLogger; if(logger != null) { logger.destroy(); } // // Now, destroy the thread pools. This must be done *only* after // all the connections are finished (the connections destruction // can require invoking callbacks with the thread pools). // if(_serverThreadPool != null) { _serverThreadPool.destroy(); } if(_clientThreadPool != null) { _clientThreadPool.destroy(); } if(_asyncIOThread != null) { _asyncIOThread.destroy(); } if(_endpointHostResolver != null) { _endpointHostResolver.destroy(); } // // Wait for all the threads to be finished. // if(_timer != null) { _timer.destroy(); } if(_clientThreadPool != null) { _clientThreadPool.joinWithAllThreads(); } if(_serverThreadPool != null) { _serverThreadPool.joinWithAllThreads(); } if(_asyncIOThread != null) { _asyncIOThread.joinWithThread(); } if(_endpointHostResolver != null) { _endpointHostResolver.joinWithThread(); } foreach(Ice.ObjectFactory factory in _objectFactoryMap.Values) { // Disable Obsolete warning/error #pragma warning disable 612, 618 factory.destroy(); #pragma warning restore 612, 618 } _objectFactoryMap.Clear(); if(_routerManager != null) { _routerManager.destroy(); } if(_locatorManager != null) { _locatorManager.destroy(); } if(_endpointFactoryManager != null) { _endpointFactoryManager.destroy(); } if(_initData.properties.getPropertyAsInt("Ice.Warn.UnusedProperties") > 0) { List<string> unusedProperties = ((Ice.PropertiesI)_initData.properties).getUnusedProperties(); if (unusedProperties.Count != 0) { StringBuilder message = new StringBuilder("The following properties were set but never read:"); foreach (string s in unusedProperties) { message.Append("\n "); message.Append(s); } _initData.logger.warning(message.ToString()); } } // // Destroy last so that a Logger plugin can receive all log/traces before its destruction. // if(_pluginManager != null) { _pluginManager.destroy(); } lock(this) { _objectAdapterFactory = null; _outgoingConnectionFactory = null; _retryQueue = null; _serverThreadPool = null; _clientThreadPool = null; _asyncIOThread = null; _endpointHostResolver = null; _timer = null; _referenceFactory = null; _requestHandlerFactory = null; _proxyFactory = null; _routerManager = null; _locatorManager = null; _endpointFactoryManager = null; _pluginManager = null; _adminAdapter = null; _adminFacets.Clear(); _state = StateDestroyed; Monitor.PulseAll(this); } }
public static int Main(string[] args) { Ice.Communicator communicator = null; Console.Write("testing a simple plug-in... "); Console.Out.Flush(); try { Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); initData.properties.setProperty("Ice.Plugin.Test", "plugins/Plugin.dll:PluginFactory 'C:\\Program Files\\' --DatabasePath " + "'C:\\Program Files\\Application\\db'"); communicator = Ice.Util.initialize(ref args, initData); communicator.destroy(); } catch (Ice.LocalException ex) { Console.WriteLine(ex.ToString());; test(false); } Console.WriteLine("ok"); Console.Write("testing a simple plug-in that fails to initialize... "); Console.Out.Flush(); communicator = null; try { Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); initData.properties.setProperty("Ice.Plugin.Test", "plugins/Plugin.dll:PluginInitializeFailFactory"); communicator = Ice.Util.initialize(ref args, initData); test(false); } catch (Ice.PluginInitializationException ex) { test(ex.InnerException.Message.Equals("PluginInitializeFailException")); } test(communicator == null); Console.WriteLine("ok"); Console.Write("testing plug-in load order... "); Console.Out.Flush(); try { Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); initData.properties.setProperty("Ice.Plugin.PluginOne", "plugins/Plugin.dll:PluginOneFactory"); initData.properties.setProperty("Ice.Plugin.PluginTwo", "plugins/Plugin.dll:PluginTwoFactory"); initData.properties.setProperty("Ice.Plugin.PluginThree", "plugins/Plugin.dll:PluginThreeFactory"); initData.properties.setProperty("Ice.PluginLoadOrder", "PluginOne, PluginTwo"); // Exclude PluginThree communicator = Ice.Util.initialize(ref args, initData); communicator.destroy(); } catch (Ice.LocalException ex) { Console.WriteLine(ex.ToString());; test(false); } Console.WriteLine("ok"); Console.Write("testing plug-in manager... "); Console.Out.Flush(); try { Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); initData.properties.setProperty("Ice.Plugin.PluginOne", "plugins/Plugin.dll:PluginOneFactory"); initData.properties.setProperty("Ice.Plugin.PluginTwo", "plugins/Plugin.dll:PluginTwoFactory"); initData.properties.setProperty("Ice.Plugin.PluginThree", "plugins/Plugin.dll:PluginThreeFactory"); initData.properties.setProperty("Ice.Plugin.PluginThree", "plugins/Plugin.dll:PluginThreeFactory"); initData.properties.setProperty("Ice.InitPlugins", "0"); communicator = Ice.Util.initialize(ref args, initData); Ice.PluginManager pm = communicator.getPluginManager(); test(pm.getPlugin("PluginOne") != null); test(pm.getPlugin("PluginTwo") != null); test(pm.getPlugin("PluginThree") != null); MyPlugin p4 = new MyPlugin(); pm.addPlugin("PluginFour", p4); test(pm.getPlugin("PluginFour") != null); pm.initializePlugins(); test(p4.isInitialized()); communicator.destroy(); test(p4.isDestroyed()); } catch (Ice.LocalException ex) { Console.WriteLine(ex.ToString());; test(false); } Console.WriteLine("ok"); Console.Write("testing destroy when a plug-in fails to initialize... "); Console.Out.Flush(); communicator = null; try { Ice.InitializationData initData = new Ice.InitializationData(); initData.properties = Ice.Util.createProperties(); initData.properties.setProperty("Ice.Plugin.PluginOneFail", "plugins/Plugin.dll:PluginOneFailFactory"); initData.properties.setProperty("Ice.Plugin.PluginTwoFail", "plugins/Plugin.dll:PluginTwoFailFactory"); initData.properties.setProperty("Ice.Plugin.PluginThreeFail", "plugins/Plugin.dll:PluginThreeFailFactory"); initData.properties.setProperty("Ice.PluginLoadOrder", "PluginOneFail, PluginTwoFail, PluginThreeFail"); communicator = Ice.Util.initialize(ref args, initData); } catch (Ice.PluginInitializationException ex) { test(ex.InnerException.Message.Equals("PluginInitializeFailException")); } test(communicator == null); Console.WriteLine("ok"); return(0); }
private TraceLevels _traceLevels; // Immutable, not reset by destroy(). #endregion Fields #region Constructors // // Only for use by Ice.CommunicatorI // public Instance(Ice.Communicator communicator, Ice.InitializationData initData) { _state = StateActive; _initData = initData; try { if(_initData.properties == null) { _initData.properties = Ice.Util.createProperties(); } lock(_staticLock) { if(!_oneOffDone) { string stdOut = _initData.properties.getProperty("Ice.StdOut"); string stdErr = _initData.properties.getProperty("Ice.StdErr"); System.IO.StreamWriter outStream = null; if(stdOut.Length > 0) { try { outStream = System.IO.File.AppendText(stdOut); } catch(System.IO.IOException ex) { Ice.FileException fe = new Ice.FileException(ex); fe.path = stdOut; throw fe; } outStream.AutoFlush = true; System.Console.Out.Close(); System.Console.SetOut(outStream); } if(stdErr.Length > 0) { if(stdErr.Equals(stdOut)) { System.Console.SetError(outStream); } else { System.IO.StreamWriter errStream = null; try { errStream = System.IO.File.AppendText(stdErr); } catch(System.IO.IOException ex) { Ice.FileException fe = new Ice.FileException(ex); fe.path = stdErr; throw fe; } errStream.AutoFlush = true; System.Console.Error.Close(); System.Console.SetError(errStream); } } _oneOffDone = true; } } if(_initData.logger == null) { string logfile = _initData.properties.getProperty("Ice.LogFile"); if(_initData.properties.getPropertyAsInt("Ice.UseSyslog") > 0) { if(logfile.Length != 0) { throw new Ice.InitializationException("Ice.LogFile and Ice.UseSyslog cannot both be set."); } _initData.logger = new Ice.SysLoggerI(_initData.properties.getProperty("Ice.ProgramName"), _initData.properties.getPropertyWithDefault("Ice.SyslogFacility", "LOG_USER")); } else if(logfile.Length != 0 || Ice.Util.getProcessLogger() is Ice.LoggerI) { // // Ice.ConsoleListener is enabled by default unless Ice.LogFile is set. // bool console = _initData.properties.getPropertyAsIntWithDefault("Ice.ConsoleListener", logfile.Length == 0 ? 1 : 0) > 0; _initData.logger = new Ice.TraceLoggerI(_initData.properties.getProperty("Ice.ProgramName"), logfile, console); } else { _initData.logger = Ice.Util.getProcessLogger(); } } _traceLevels = new TraceLevels(_initData.properties); _defaultsAndOverrides = new DefaultsAndOverrides(_initData.properties); #if COMPACT _factoryAssemblies = _initData.properties.getPropertyAsList("Ice.FactoryAssemblies"); #endif { const int defaultMessageSizeMax = 1024; int num = _initData.properties.getPropertyAsIntWithDefault("Ice.MessageSizeMax", defaultMessageSizeMax); if(num < 1) { _messageSizeMax = defaultMessageSizeMax * 1024; // Ignore non-sensical values. } else if(num > 0x7fffffff / 1024) { _messageSizeMax = 0x7fffffff; } else { _messageSizeMax = num * 1024; // Property is in kilobytes, _messageSizeMax in bytes } } // // Client ACM enabled by default. Server ACM disabled by default. // _clientACM = _initData.properties.getPropertyAsIntWithDefault("Ice.ACM.Client", 60); _serverACM = _initData.properties.getPropertyAsInt("Ice.ACM.Server"); _implicitContext = Ice.ImplicitContextI.create(_initData.properties.getProperty("Ice.ImplicitContext")); _routerManager = new RouterManager(); _locatorManager = new LocatorManager(_initData.properties); _referenceFactory = new ReferenceFactory(this, communicator); _proxyFactory = new ProxyFactory(this); bool ipv4 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv4", 1) > 0; bool ipv6 = _initData.properties.getPropertyAsIntWithDefault("Ice.IPv6", 0) > 0; if(!ipv4 && !ipv6) { throw new Ice.InitializationException("Both IPV4 and IPv6 support cannot be disabled."); } else if(ipv4 && ipv6) { _protocolSupport = Network.EnableBoth; } else if(ipv4) { _protocolSupport = Network.EnableIPv4; } else { _protocolSupport = Network.EnableIPv6; } _endpointFactoryManager = new EndpointFactoryManager(this); EndpointFactory tcpEndpointFactory = new TcpEndpointFactory(this); _endpointFactoryManager.add(tcpEndpointFactory); EndpointFactory udpEndpointFactory = new UdpEndpointFactory(this); _endpointFactoryManager.add(udpEndpointFactory); _pluginManager = new Ice.PluginManagerI(communicator); _outgoingConnectionFactory = new OutgoingConnectionFactory(this); _servantFactoryManager = new ObjectFactoryManager(); _objectAdapterFactory = new ObjectAdapterFactory(this, communicator); _retryQueue = new RetryQueue(this); string[] facetFilter = _initData.properties.getPropertyAsList("Ice.Admin.Facets"); if(facetFilter.Length > 0) { foreach(string s in facetFilter) { _adminFacetFilter.Add(s); } } _adminFacets.Add("Properties", new PropertiesAdminI(_initData.properties)); _adminFacets.Add("Process", new ProcessI(communicator)); } catch(Ice.LocalException) { destroy(); throw; } }
// // Only for use by Ice.CommunicatorI // public bool destroy() { lock(this) { // // If the _state is not StateActive then the instance is // either being destroyed, or has already been destroyed. // if(_state != StateActive) { return false; } // // We cannot set state to StateDestroyed otherwise instance // methods called during the destroy process (such as // outgoingConnectionFactory() from // ObjectAdapterI::deactivate() will cause an exception. // _state = StateDestroyInProgress; } if(_objectAdapterFactory != null) { _objectAdapterFactory.shutdown(); } if(_outgoingConnectionFactory != null) { _outgoingConnectionFactory.destroy(); } if(_objectAdapterFactory != null) { _objectAdapterFactory.destroy(); } if(_outgoingConnectionFactory != null) { _outgoingConnectionFactory.waitUntilFinished(); } if(_retryQueue != null) { _retryQueue.destroy(); } ThreadPool serverThreadPool = null; ThreadPool clientThreadPool = null; AsyncIOThread asyncIOThread = null; EndpointHostResolver endpointHostResolver = null; lock(this) { _objectAdapterFactory = null; _outgoingConnectionFactory = null; _retryQueue = null; if(_connectionMonitor != null) { _connectionMonitor.destroy(); _connectionMonitor = null; } if(_serverThreadPool != null) { _serverThreadPool.destroy(); serverThreadPool = _serverThreadPool; _serverThreadPool = null; } if(_clientThreadPool != null) { _clientThreadPool.destroy(); clientThreadPool = _clientThreadPool; _clientThreadPool = null; } if(_asyncIOThread != null) { _asyncIOThread.destroy(); asyncIOThread = _asyncIOThread; _asyncIOThread = null; } if(_endpointHostResolver != null) { _endpointHostResolver.destroy(); endpointHostResolver = _endpointHostResolver; _endpointHostResolver = null; } if(_timer != null) { _timer.destroy(); _timer = null; } if(_servantFactoryManager != null) { _servantFactoryManager.destroy(); _servantFactoryManager = null; } if(_referenceFactory != null) { _referenceFactory.destroy(); _referenceFactory = null; } // No destroy function defined. // _proxyFactory.destroy(); _proxyFactory = null; if(_routerManager != null) { _routerManager.destroy(); _routerManager = null; } if(_locatorManager != null) { _locatorManager.destroy(); _locatorManager = null; } if(_endpointFactoryManager != null) { _endpointFactoryManager.destroy(); _endpointFactoryManager = null; } if(_pluginManager != null) { _pluginManager.destroy(); _pluginManager = null; } _adminAdapter = null; _adminFacets.Clear(); _state = StateDestroyed; } // // Join with threads outside the synchronization. // if(clientThreadPool != null) { clientThreadPool.joinWithAllThreads(); } if(serverThreadPool != null) { serverThreadPool.joinWithAllThreads(); } if(asyncIOThread != null) { asyncIOThread.joinWithThread(); } if(endpointHostResolver != null) { endpointHostResolver.joinWithThread(); } if(_initData.properties.getPropertyAsInt("Ice.Warn.UnusedProperties") > 0) { ArrayList unusedProperties = ((Ice.PropertiesI)_initData.properties).getUnusedProperties(); if(unusedProperties.Count != 0) { StringBuilder message = new StringBuilder("The following properties were set but never read:"); foreach(string s in unusedProperties) { message.Append("\n "); message.Append(s); } _initData.logger.warning(message.ToString()); } } return true; }