summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Freeze/Freeze.rc8
-rw-r--r--cpp/src/FreezeScript/DumpDB.rc8
-rw-r--r--cpp/src/FreezeScript/TransformDB.rc8
-rw-r--r--cpp/src/Glacier2/Glacier2.rc8
-rw-r--r--cpp/src/Glacier2/Glacier2Router.rc8
-rw-r--r--cpp/src/Ice/CommunicatorI.cpp28
-rw-r--r--cpp/src/Ice/Exception.cpp2
-rw-r--r--cpp/src/Ice/Ice.rc8
-rw-r--r--cpp/src/Ice/Instance.cpp6
-rw-r--r--cpp/src/Ice/PluginManagerI.cpp49
-rw-r--r--cpp/src/Ice/StringConverter.cpp2
-rw-r--r--cpp/src/IceBox/IceBox.rc8
-rw-r--r--cpp/src/IceBox/IceBoxAdmin.rc8
-rw-r--r--cpp/src/IceBox/IceBoxExe.rc8
-rw-r--r--cpp/src/IceBox/ServiceManagerI.cpp2
-rw-r--r--cpp/src/IceGrid/Activator.cpp154
-rw-r--r--cpp/src/IceGrid/Activator.h4
-rw-r--r--cpp/src/IceGrid/AdapterCache.cpp47
-rw-r--r--cpp/src/IceGrid/AdapterCache.h13
-rw-r--r--cpp/src/IceGrid/IceGridAdmin.rc8
-rw-r--r--cpp/src/IceGrid/IceGridNode.cpp14
-rw-r--r--cpp/src/IceGrid/IceGridNode.rc8
-rw-r--r--cpp/src/IceGrid/IceGridRegistry.rc8
-rw-r--r--cpp/src/IceGrid/LocatorI.cpp694
-rw-r--r--cpp/src/IceGrid/LocatorI.h43
-rw-r--r--cpp/src/IceGrid/NodeI.cpp10
-rw-r--r--cpp/src/IceGrid/NodeI.h2
-rw-r--r--cpp/src/IceGrid/ServerI.cpp8
-rw-r--r--cpp/src/IceGrid/ServerI.h1
-rw-r--r--cpp/src/IceGridLib/IceGrid.rc8
-rw-r--r--cpp/src/IcePatch2/IcePatch2.rc8
-rw-r--r--cpp/src/IcePatch2/IcePatch2Calc.rc8
-rw-r--r--cpp/src/IcePatch2/IcePatch2Client.rc8
-rw-r--r--cpp/src/IcePatch2/IcePatch2Server.rc8
-rw-r--r--cpp/src/IceSSL/AcceptorI.cpp4
-rw-r--r--cpp/src/IceSSL/ConnectorI.cpp4
-rw-r--r--cpp/src/IceSSL/IceSSL.rc8
-rw-r--r--cpp/src/IceSSL/Instance.cpp4
-rw-r--r--cpp/src/IceSSL/PluginI.cpp2
-rw-r--r--cpp/src/IceStorm/IceStorm.rc8
-rw-r--r--cpp/src/IceStorm/IceStormAdmin.rc8
-rw-r--r--cpp/src/IceStorm/IceStormMigrate.rc8
-rw-r--r--cpp/src/IceStorm/IceStormService.rc8
-rw-r--r--cpp/src/IceUtil/IceUtil.rc8
-rw-r--r--cpp/src/IceXML/IceXML.rc8
-rw-r--r--cpp/src/Slice/Slice.rc8
-rwxr-xr-xcpp/src/ca/iceca2
-rw-r--r--cpp/src/iceserviceinstall/IceServiceInstall.rc8
-rw-r--r--cpp/src/slice2cpp/Slice2Cpp.rc8
-rw-r--r--cpp/src/slice2cs/Slice2Cs.rc8
-rw-r--r--cpp/src/slice2docbook/Slice2Docbook.rc8
-rw-r--r--cpp/src/slice2freeze/Slice2Freeze.rc8
-rw-r--r--cpp/src/slice2freezej/Slice2FreezeJ.rc8
-rw-r--r--cpp/src/slice2html/Slice2Html.rc8
-rw-r--r--cpp/src/slice2java/Slice2Java.rc8
-rw-r--r--cpp/src/slice2py/Slice2Py.rc8
-rw-r--r--cpp/src/slice2rb/Slice2Rb.rc8
57 files changed, 807 insertions, 568 deletions
diff --git a/cpp/src/Freeze/Freeze.rc b/cpp/src/Freeze/Freeze.rc
index 14424d9e6f2..7b0f81d2f69 100644
--- a/cpp/src/Freeze/Freeze.rc
+++ b/cpp/src/Freeze/Freeze.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Freeze DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/FreezeScript/DumpDB.rc b/cpp/src/FreezeScript/DumpDB.rc
index 071e92a3280..a1a7d9d955f 100644
--- a/cpp/src/FreezeScript/DumpDB.rc
+++ b/cpp/src/FreezeScript/DumpDB.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Dump Database\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "dumpdb\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "dumpdb.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/FreezeScript/TransformDB.rc b/cpp/src/FreezeScript/TransformDB.rc
index 5fbda99e26e..d0d670dc192 100644
--- a/cpp/src/FreezeScript/TransformDB.rc
+++ b/cpp/src/FreezeScript/TransformDB.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Transform Database\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "transformdb\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "transformdb.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/Glacier2/Glacier2.rc b/cpp/src/Glacier2/Glacier2.rc
index 379a9626d84..b97221f24de 100644
--- a/cpp/src/Glacier2/Glacier2.rc
+++ b/cpp/src/Glacier2/Glacier2.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Glacier2 DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/Glacier2/Glacier2Router.rc b/cpp/src/Glacier2/Glacier2Router.rc
index 4d130898819..3a7895aad39 100644
--- a/cpp/src/Glacier2/Glacier2Router.rc
+++ b/cpp/src/Glacier2/Glacier2Router.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Glacier2 Router\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "glacier2router\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "glacier2router.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp
index 65895a3099b..609926aa1df 100644
--- a/cpp/src/Ice/CommunicatorI.cpp
+++ b/cpp/src/Ice/CommunicatorI.cpp
@@ -71,7 +71,7 @@ printGCStats(const IceInternal::GCStats& stats)
void
Ice::CommunicatorI::destroy()
{
- if(_instance->destroy())
+ if(_instance && _instance->destroy())
{
IceUtil::StaticMutex::Lock sync(gcMutex);
@@ -289,15 +289,7 @@ Ice::CommunicatorI::CommunicatorI(const InitializationData& initData)
// destructor is invoked.
//
const_cast<DynamicLibraryListPtr&>(_dynamicLibraryList) = _instance->dynamicLibraryList();
- }
- catch(...)
- {
- __setNoDelete(false);
- throw;
- }
- __setNoDelete(false);
- {
//
// If this is the first communicator that is created, use that communicator's
// property settings to determine whether to start the garbage collector.
@@ -316,13 +308,25 @@ Ice::CommunicatorI::CommunicatorI(const InitializationData& initData)
}
if(++communicatorCount == 1)
{
- theCollector = new IceInternal::GC(gcInterval, printGCStats);
+ IceUtil::Handle<IceInternal::GC> collector = new IceInternal::GC(gcInterval, printGCStats);
if(gcInterval > 0)
{
- theCollector->start();
+ collector->start();
}
+
+ //
+ // Assign only if start() succeeds, if it fails this makes sure stop isn't called in destroy().
+ //
+ theCollector = collector;
}
}
+ catch(...)
+ {
+ destroy();
+ __setNoDelete(false);
+ throw;
+ }
+ __setNoDelete(false);
}
Ice::CommunicatorI::~CommunicatorI()
@@ -343,7 +347,7 @@ Ice::CommunicatorI::finishSetup(int& argc, char* argv[])
}
catch(...)
{
- _instance->destroy();
+ destroy();
throw;
}
}
diff --git a/cpp/src/Ice/Exception.cpp b/cpp/src/Ice/Exception.cpp
index dd72f15ed82..4b584274039 100644
--- a/cpp/src/Ice/Exception.cpp
+++ b/cpp/src/Ice/Exception.cpp
@@ -635,7 +635,7 @@ void
Ice::PluginInitializationException::ice_print(ostream& out) const
{
Exception::ice_print(out);
- out << ":\nplugin initialization failed";
+ out << ":\nplug-in initialization failed";
if(!reason.empty())
{
out << ": " << reason;
diff --git a/cpp/src/Ice/Ice.rc b/cpp/src/Ice/Ice.rc
index 7df22ac01fe..f6f32f15b0f 100644
--- a/cpp/src/Ice/Ice.rc
+++ b/cpp/src/Ice/Ice.rc
@@ -2,8 +2,8 @@
#include "EventLoggerMsg.rc"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -24,12 +24,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Ice Core DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp
index 0bee4814122..c8041f960e5 100644
--- a/cpp/src/Ice/Instance.cpp
+++ b/cpp/src/Ice/Instance.cpp
@@ -755,7 +755,7 @@ void
IceInternal::Instance::setStringConverter(const Ice::StringConverterPtr& stringConverter)
{
//
- // No locking, as it can only be called during plugin loading
+ // No locking, as it can only be called during plug-in loading
//
_initData.stringConverter = stringConverter;
}
@@ -764,7 +764,7 @@ void
IceInternal::Instance::setWstringConverter(const Ice::WstringConverterPtr& wstringConverter)
{
//
- // No locking, as it can only be called during plugin loading
+ // No locking, as it can only be called during plug-in loading
//
_initData.wstringConverter = wstringConverter;
}
@@ -773,7 +773,7 @@ void
IceInternal::Instance::setLogger(const Ice::LoggerPtr& logger)
{
//
- // No locking, as it can only be called during plugin loading
+ // No locking, as it can only be called during plug-in loading
//
_initData.logger = logger;
}
diff --git a/cpp/src/Ice/PluginManagerI.cpp b/cpp/src/Ice/PluginManagerI.cpp
index d19e195b622..0b114402ac8 100644
--- a/cpp/src/Ice/PluginManagerI.cpp
+++ b/cpp/src/Ice/PluginManagerI.cpp
@@ -29,12 +29,12 @@ Ice::PluginManagerI::initializePlugins()
if(_initialized)
{
InitializationException ex(__FILE__, __LINE__);
- ex.reason = "plugins already initialized";
+ ex.reason = "plug-ins already initialized";
throw ex;
}
//
- // Invoke initialize() on the plugins, in the order they were loaded.
+ // Invoke initialize() on the plug-ins, in the order they were loaded.
//
vector<PluginPtr> initializedPlugins;
try
@@ -48,7 +48,7 @@ Ice::PluginManagerI::initializePlugins()
catch(...)
{
//
- // Destroy the plugins that have been successfully initialized, in the
+ // Destroy the plug-ins that have been successfully initialized, in the
// reverse order.
//
for(vector<PluginPtr>::reverse_iterator p = initializedPlugins.rbegin(); p != initializedPlugins.rend(); ++p)
@@ -118,14 +118,39 @@ Ice::PluginManagerI::destroy()
if(_communicator)
{
-
if(_initialized)
{
map<string, PluginPtr>::iterator r;
for(r = _plugins.begin(); r != _plugins.end(); ++r)
{
- r->second->destroy();
- r->second = 0;
+ try
+ {
+ r->second->destroy();
+ r->second = 0;
+ }
+ catch(const std::exception& ex)
+ {
+ Warning out(getProcessLogger());
+ out << "unexpected exception raised by plug-in '" << r->first << "' destruction.\n";
+ out << "exception: " << ex.what();
+ }
+ catch(const std::string& str)
+ {
+ Warning out(getProcessLogger());
+ out << "unexpected exception raised by plug-in '" << r->first << "' destruction.\n";
+ out << "exception: " << str;
+ }
+ catch(const char* msg)
+ {
+ Warning out(getProcessLogger());
+ out << "unexpected exception raised by plug-in '" << r->first << "' destruction.\n";
+ out << "exception: " << msg;
+ }
+ catch(...)
+ {
+ Warning out(getProcessLogger());
+ out << "unexpected exception raised by plug-in '" << r->first << "' destruction.";
+ }
}
}
@@ -157,8 +182,8 @@ Ice::PluginManagerI::loadPlugins(int& argc, char* argv[])
// Ice.Plugin.name[.<language>]=entry_point [args]
//
// If the Ice.PluginLoadOrder property is defined, load the
- // specified plugins in the specified order, then load any
- // remaining plugins.
+ // specified plug-ins in the specified order, then load any
+ // remaining plug-ins.
//
const string prefix = "Ice.Plugin.";
PropertiesPtr properties = _communicator->getProperties();
@@ -172,7 +197,7 @@ Ice::PluginManagerI::loadPlugins(int& argc, char* argv[])
if(_plugins.find(name) != _plugins.end())
{
PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "plugin `" + name + "' already loaded";
+ ex.reason = "plug-in `" + name + "' already loaded";
throw ex;
}
@@ -194,13 +219,13 @@ Ice::PluginManagerI::loadPlugins(int& argc, char* argv[])
else
{
PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "plugin `" + name + "' not defined";
+ ex.reason = "plug-in `" + name + "' not defined";
throw ex;
}
}
//
- // Load any remaining plugins that weren't specified in PluginLoadOrder.
+ // Load any remaining plug-ins that weren't specified in PluginLoadOrder.
//
while(!plugins.empty())
@@ -259,7 +284,7 @@ Ice::PluginManagerI::loadPlugins(int& argc, char* argv[])
//
// An application can set Ice.InitPlugins=0 if it wants to postpone
// initialization until after it has interacted directly with the
- // plugins.
+ // plug-ins.
//
if(properties->getPropertyAsIntWithDefault("Ice.InitPlugins", 1) > 0)
{
diff --git a/cpp/src/Ice/StringConverter.cpp b/cpp/src/Ice/StringConverter.cpp
index 6fa5382f7d6..52c9dc2ed4b 100644
--- a/cpp/src/Ice/StringConverter.cpp
+++ b/cpp/src/Ice/StringConverter.cpp
@@ -221,7 +221,7 @@ StringConverterPlugin::destroy()
}
//
-// The entry point for the "string converter" plugin built-in the Ice library
+// The entry point for the "string converter" plug-in built-in the Ice library
//
extern "C"
{
diff --git a/cpp/src/IceBox/IceBox.rc b/cpp/src/IceBox/IceBox.rc
index 15d42784409..52d6ced0e5b 100644
--- a/cpp/src/IceBox/IceBox.rc
+++ b/cpp/src/IceBox/IceBox.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceBox DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceBox/IceBoxAdmin.rc b/cpp/src/IceBox/IceBoxAdmin.rc
index b46b139a178..0c822016c62 100644
--- a/cpp/src/IceBox/IceBoxAdmin.rc
+++ b/cpp/src/IceBox/IceBoxAdmin.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceBox Admin\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "iceboxadmin\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "iceboxadmin.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceBox/IceBoxExe.rc b/cpp/src/IceBox/IceBoxExe.rc
index c3c63e2086b..6d37edcb4d7 100644
--- a/cpp/src/IceBox/IceBoxExe.rc
+++ b/cpp/src/IceBox/IceBoxExe.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceBox\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceBox/ServiceManagerI.cpp b/cpp/src/IceBox/ServiceManagerI.cpp
index a3438795057..0cb8aba1c9d 100644
--- a/cpp/src/IceBox/ServiceManagerI.cpp
+++ b/cpp/src/IceBox/ServiceManagerI.cpp
@@ -961,7 +961,7 @@ IceBox::ServiceManagerI::createCommunicator(const string& service, Ice::StringSe
//
// Remaining command line options are passed to the communicator. This is
- // necessary for Ice plugin properties (e.g.: IceSSL).
+ // necessary for Ice plug-in properties (e.g.: IceSSL).
//
InitializationData initData;
initData.properties = properties;
diff --git a/cpp/src/IceGrid/Activator.cpp b/cpp/src/IceGrid/Activator.cpp
index c4fd6f90853..0b99b68a417 100644
--- a/cpp/src/IceGrid/Activator.cpp
+++ b/cpp/src/IceGrid/Activator.cpp
@@ -608,6 +608,15 @@ Activator::activate(const string& name,
throw ex;
}
+ int errorFds[2];
+ if(pipe(errorFds) != 0)
+ {
+ SyscallException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
+ }
+
+
//
// Convert to standard argc/argv.
//
@@ -650,14 +659,14 @@ Activator::activate(const string& name,
{
ostringstream os;
os << gid;
- reportChildError(getSystemErrno(), fds[1], "cannot set process group id", os.str().c_str());
+ reportChildError(getSystemErrno(), errorFds[1], "cannot set process group id", os.str().c_str());
}
if(setuid(uid) == -1)
{
ostringstream os;
os << uid;
- reportChildError(getSystemErrno(), fds[1], "cannot set process user id", os.str().c_str());
+ reportChildError(getSystemErrno(), errorFds[1], "cannot set process user id", os.str().c_str());
}
//
@@ -673,7 +682,7 @@ Activator::activate(const string& name,
int maxFd = static_cast<int>(sysconf(_SC_OPEN_MAX));
for(int fd = 3; fd < maxFd; ++fd)
{
- if(fd != fds[1])
+ if(fd != fds[1] && fd != errorFds[1])
{
close(fd);
}
@@ -686,7 +695,7 @@ Activator::activate(const string& name,
//
if(putenv(strdup(env.argv[i])) != 0)
{
- reportChildError(errno, fds[1], "cannot set environment variable", env.argv[i]);
+ reportChildError(errno, errorFds[1], "cannot set environment variable", env.argv[i]);
}
}
@@ -697,18 +706,65 @@ Activator::activate(const string& name,
{
if(chdir(pwdCStr) == -1)
{
- reportChildError(errno, fds[1], "cannot change working directory to", pwdCStr);
+ reportChildError(errno, errorFds[1], "cannot change working directory to", pwdCStr);
}
}
+ //
+ // Close on exec the error message file descriptor.
+ //
+ int flags = fcntl(errorFds[1], F_GETFD);
+ flags |= 1; // FD_CLOEXEC
+ if(fcntl(errorFds[1], F_SETFD, flags) == -1)
+ {
+ close(errorFds[1]);
+ errorFds[1] = -1;
+ }
+
if(execvp(av.argv[0], av.argv) == -1)
{
- reportChildError(errno, fds[1], "cannot execute", av.argv[0]);
+ if(errorFds[1] != -1)
+ {
+ reportChildError(errno, errorFds[1], "cannot execute", av.argv[0]);
+ }
+ else
+ {
+ reportChildError(errno, fds[1], "cannot execute", av.argv[0]);
+ }
}
}
else // Parent process.
{
close(fds[1]);
+ close(errorFds[1]);
+
+ //
+ // Read a potential error message over the error message pipe.
+ //
+ char s[16];
+ ssize_t rs;
+ string message;
+ while((rs = read(errorFds[0], &s, 16)) > 0)
+ {
+ message.append(s, rs);
+ }
+
+ //
+ // If an error occured before the exec() we do some cleanup and throw.
+ //
+ if(!message.empty())
+ {
+ close(fds[0]);
+ close(errorFds[0]);
+ waitPid(pid);
+ throw message;
+ }
+
+ //
+ // Otherwise, the exec() was successfull and we don't need the error message
+ // pipe anymore.
+ //
+ close(errorFds[0]);
Process process;
process.pid = pid;
@@ -1250,45 +1306,7 @@ Activator::terminationListener()
for(vector<Process>::const_iterator p = terminated.begin(); p != terminated.end(); ++p)
{
- int status;
-#if defined(__linux)
- int nRetry = 0;
- while(true) // The while loop is necessary for the linux workaround.
- {
- pid_t pid = waitpid(p->pid, &status, 0);
- if(pid < 0)
- {
- //
- // Some Linux distribution have a bogus waitpid() (e.g.: CentOS 4.x). It doesn't
- // block and reports an incorrect ECHILD error on the first call. We sleep a
- // little and retry to work around this issue (it appears from testing that a
- // single retry is enough but to make sure we retry up to 10 times before to throw.)
- //
- if(errno == ECHILD && nRetry < 10)
- {
- // Wait 1ms, 11ms, 21ms, etc.
- IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(nRetry * 10 + 1));
- ++nRetry;
- continue;
- }
- SyscallException ex(__FILE__, __LINE__);
- ex.error = getSystemErrno();
- throw ex;
- }
- assert(pid == p->pid);
- break;
- }
-#else
- pid_t pid = waitpid(p->pid, &status, 0);
- if(pid < 0)
- {
- SyscallException ex(__FILE__, __LINE__);
- ex.error = getSystemErrno();
- throw ex;
- }
- assert(pid == p->pid);
-#endif
-
+ int status = waitPid(p->pid);
if(_traceLevels->activator > 0)
{
Ice::Trace out(_traceLevels->logger, _traceLevels->activatorCat);
@@ -1348,3 +1366,49 @@ Activator::setInterrupt()
write(_fdIntrWrite, &c, 1);
#endif
}
+
+#ifndef _WIN32
+int
+Activator::waitPid(pid_t processPid)
+{
+ int status;
+#if defined(__linux)
+ int nRetry = 0;
+ while(true) // The while loop is necessary for the linux workaround.
+ {
+ pid_t pid = waitpid(processPid, &status, 0);
+ if(pid < 0)
+ {
+ //
+ // Some Linux distribution have a bogus waitpid() (e.g.: CentOS 4.x). It doesn't
+ // block and reports an incorrect ECHILD error on the first call. We sleep a
+ // little and retry to work around this issue (it appears from testing that a
+ // single retry is enough but to make sure we retry up to 10 times before to throw.)
+ //
+ if(errno == ECHILD && nRetry < 10)
+ {
+ // Wait 1ms, 11ms, 21ms, etc.
+ IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(nRetry * 10 + 1));
+ ++nRetry;
+ continue;
+ }
+ SyscallException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
+ }
+ assert(pid == processPid);
+ break;
+ }
+#else
+ pid_t pid = waitpid(processPid, &status, 0);
+ if(pid < 0)
+ {
+ SyscallException ex(__FILE__, __LINE__);
+ ex.error = getSystemErrno();
+ throw ex;
+ }
+ assert(pid == processPid);
+#endif
+ return status;
+}
+#endif
diff --git a/cpp/src/IceGrid/Activator.h b/cpp/src/IceGrid/Activator.h
index 3fa72249b83..0eb8ecccc16 100644
--- a/cpp/src/IceGrid/Activator.h
+++ b/cpp/src/IceGrid/Activator.h
@@ -61,6 +61,10 @@ private:
void terminationListener();
void clearInterrupt();
void setInterrupt();
+
+#ifndef _WIN32
+ int waitPid(pid_t);
+#endif
struct Process
{
diff --git a/cpp/src/IceGrid/AdapterCache.cpp b/cpp/src/IceGrid/AdapterCache.cpp
index f6970f4e09e..af24d9da061 100644
--- a/cpp/src/IceGrid/AdapterCache.cpp
+++ b/cpp/src/IceGrid/AdapterCache.cpp
@@ -231,7 +231,7 @@ ServerAdapterEntry::ServerAdapterEntry(AdapterCache& cache,
void
ServerAdapterEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& nReplicas, bool& replicaGroup,
- bool& roundRobin)
+ bool& roundRobin, const set<string>&)
{
nReplicas = 1;
replicaGroup = false;
@@ -242,11 +242,6 @@ ServerAdapterEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int&
adapters.push_back(info);
}
-void
-ServerAdapterEntry::increaseRoundRobinCount(int roundRobinCount)
-{
-}
-
float
ServerAdapterEntry::getLeastLoadedNodeLoad(LoadSample loadSample) const
{
@@ -383,7 +378,7 @@ ReplicaGroupEntry::update(const LoadBalancingPolicyPtr& policy)
void
ReplicaGroupEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& nReplicas, bool& replicaGroup,
- bool& roundRobin)
+ bool& roundRobin, const set<string>& excludes)
{
vector<ServerAdapterEntryPtr> replicas;
bool adaptive = false;
@@ -453,32 +448,28 @@ ReplicaGroupEntry::getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& n
//
for(vector<ServerAdapterEntryPtr>::const_iterator p = replicas.begin(); p != replicas.end(); ++p)
{
- try
- {
- int dummy;
- bool dummy2;
- bool dummy3;
- (*p)->getLocatorAdapterInfo(adapters, dummy, dummy2, dummy3);
- }
- catch(const AdapterNotExistException&)
- {
- }
- catch(const NodeUnreachableException&)
- {
- }
- catch(const DeploymentException&)
+ if(!roundRobin || excludes.find((*p)->getId()) == excludes.end())
{
+ try
+ {
+ int dummy;
+ bool dummy2;
+ bool dummy3;
+ (*p)->getLocatorAdapterInfo(adapters, dummy, dummy2, dummy3, set<string>());
+ }
+ catch(const AdapterNotExistException&)
+ {
+ }
+ catch(const NodeUnreachableException&)
+ {
+ }
+ catch(const DeploymentException&)
+ {
+ }
}
}
}
-void
-ReplicaGroupEntry::increaseRoundRobinCount(int count)
-{
- Lock sync(*this);
- _lastReplica = (_lastReplica + count) % static_cast<int>(_replicas.size());
-}
-
float
ReplicaGroupEntry::getLeastLoadedNodeLoad(LoadSample loadSample) const
{
diff --git a/cpp/src/IceGrid/AdapterCache.h b/cpp/src/IceGrid/AdapterCache.h
index 3a862d12d97..8ee42bc1531 100644
--- a/cpp/src/IceGrid/AdapterCache.h
+++ b/cpp/src/IceGrid/AdapterCache.h
@@ -43,8 +43,11 @@ public:
AdapterEntry(AdapterCache&, const std::string&, const std::string&);
- virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&) = 0;
- virtual void increaseRoundRobinCount(int) = 0;
+ virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&, const std::set<std::string>&) = 0;
+ void getLocatorAdapterInfo(LocatorAdapterInfoSeq& adapters, int& count, bool& replicaGroup, bool& roundRobin)
+ {
+ getLocatorAdapterInfo(adapters, count, replicaGroup, roundRobin, std::set<std::string>());
+ }
virtual float getLeastLoadedNodeLoad(LoadSample) const = 0;
virtual AdapterInfoSeq getAdapterInfo() const = 0;
@@ -68,8 +71,7 @@ public:
ServerAdapterEntry(AdapterCache&, const std::string&, const std::string&, const std::string&, int,
const ServerEntryPtr&);
- virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&);
- virtual void increaseRoundRobinCount(int);
+ virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&, const std::set<std::string>&);
virtual float getLeastLoadedNodeLoad(LoadSample) const;
virtual AdapterInfoSeq getAdapterInfo() const;
virtual const std::string& getReplicaGroupId() const { return _replicaGroupId; }
@@ -91,8 +93,7 @@ public:
ReplicaGroupEntry(AdapterCache&, const std::string&, const std::string&, const LoadBalancingPolicyPtr&);
- virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&);
- virtual void increaseRoundRobinCount(int);
+ virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&, const std::set<std::string>&);
virtual float getLeastLoadedNodeLoad(LoadSample) const;
virtual AdapterInfoSeq getAdapterInfo() const;
diff --git a/cpp/src/IceGrid/IceGridAdmin.rc b/cpp/src/IceGrid/IceGridAdmin.rc
index b93a5b507d6..2e59fbb4eb9 100644
--- a/cpp/src/IceGrid/IceGridAdmin.rc
+++ b/cpp/src/IceGrid/IceGridAdmin.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceGrid Admin\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icegridadmin\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icegridadmin.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceGrid/IceGridNode.cpp b/cpp/src/IceGrid/IceGridNode.cpp
index a2d4513d735..4dc9a62e978 100644
--- a/cpp/src/IceGrid/IceGridNode.cpp
+++ b/cpp/src/IceGrid/IceGridNode.cpp
@@ -521,7 +521,7 @@ NodeService::start(int argc, char* argv[])
catch(const Ice::NotRegisteredException&)
{
//
- // Some plugin removed the Process facet, so we don't replace it.
+ // Some plug-in removed the Process facet, so we don't replace it.
// (unlikely error though)
//
}
@@ -718,12 +718,6 @@ NodeService::stop()
_node->getPlatformInfo().stop();
//
- // Break cylic reference counts.
- //
- _node->destroy();
- _node = 0;
-
- //
// We can now safely shutdown the communicator.
//
try
@@ -739,6 +733,12 @@ NodeService::stop()
}
//
+ // Break cylic reference counts.
+ //
+ _node->shutdown();
+ _node = 0;
+
+ //
// And shutdown the collocated registry.
//
if(_registry)
diff --git a/cpp/src/IceGrid/IceGridNode.rc b/cpp/src/IceGrid/IceGridNode.rc
index e2ab0456270..bb5e8f6bd8a 100644
--- a/cpp/src/IceGrid/IceGridNode.rc
+++ b/cpp/src/IceGrid/IceGridNode.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceGrid Node\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icegridnode\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icegridnode.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceGrid/IceGridRegistry.rc b/cpp/src/IceGrid/IceGridRegistry.rc
index d5e6c8d9db7..6c8734ee12c 100644
--- a/cpp/src/IceGrid/IceGridRegistry.rc
+++ b/cpp/src/IceGrid/IceGridRegistry.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceGrid Registry\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icegridregistry\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icegridregistry.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceGrid/LocatorI.cpp b/cpp/src/IceGrid/LocatorI.cpp
index 4e354c5d9bf..d038ccae641 100644
--- a/cpp/src/IceGrid/LocatorI.cpp
+++ b/cpp/src/IceGrid/LocatorI.cpp
@@ -150,80 +150,144 @@ private:
const Ice::ObjectPrx _obj;
};
-}
-
-LocatorI::Request::Request(const Ice::AMD_Locator_findAdapterByIdPtr& amdCB,
- const LocatorIPtr& locator,
- const string& id,
- bool replicaGroup,
- bool roundRobin,
- const LocatorAdapterInfoSeq& adapters,
- int count) :
- _amdCB(amdCB),
- _locator(locator),
- _id(id),
- _replicaGroup(replicaGroup),
- _roundRobin(roundRobin),
- _adapters(adapters),
- _traceLevels(locator->getTraceLevels()),
- _count(count),
- _lastAdapter(_adapters.begin())
+class AdapterRequest : public LocatorI::Request
{
- assert((_count == 0 && _adapters.empty()) || _count > 0);
-}
+public:
-void
-LocatorI::Request::execute()
+ AdapterRequest(const Ice::AMD_Locator_findAdapterByIdPtr& amdCB,
+ const LocatorIPtr& locator,
+ const LocatorAdapterInfo& adapter) :
+ _amdCB(amdCB),
+ _locator(locator),
+ _adapter(adapter),
+ _traceLevels(locator->getTraceLevels())
+ {
+ assert(_adapter.proxy);
+ }
+
+ virtual void
+ execute()
+ {
+ _locator->getDirectProxy(_adapter, this);
+ }
+
+ virtual void
+ activating(const string&)
+ {
+ // Nothing to do.
+ }
+
+ virtual void
+ response(const std::string&, const Ice::ObjectPrx& proxy)
+ {
+ assert(proxy);
+ _amdCB->ice_response(proxy->ice_identity(_locator->getCommunicator()->stringToIdentity("dummy")));
+ }
+
+ virtual void
+ exception(const std::string&, const Ice::Exception& ex)
+ {
+ if(_traceLevels->locator > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->locatorCat);
+ out << "couldn't resolve adapter`" << _adapter.id << "' endpoints:\n" << toString(ex);
+ }
+ _amdCB->ice_response(0);
+ }
+
+private:
+
+ const Ice::AMD_Locator_findAdapterByIdPtr _amdCB;
+ const LocatorIPtr _locator;
+ const LocatorAdapterInfo _adapter;
+ const TraceLevelsPtr _traceLevels;
+};
+
+class ReplicaGroupRequest : public LocatorI::Request, public IceUtil::Mutex
{
- //
- // If there's no adapters to request, we're done, send the
- // response.
- //
- if(_adapters.empty())
+public:
+
+ ReplicaGroupRequest(const Ice::AMD_Locator_findAdapterByIdPtr& amdCB,
+ const LocatorIPtr& locator,
+ const string& id,
+ const LocatorAdapterInfoSeq& adapters,
+ int count,
+ Ice::ObjectPrx firstProxy) :
+ _amdCB(amdCB),
+ _locator(locator),
+ _id(id),
+ _adapters(adapters),
+ _traceLevels(locator->getTraceLevels()),
+ _count(count),
+ _lastAdapter(_adapters.begin())
{
- sendResponse();
- return;
+ assert(_adapters.empty() || _count > 0);
+
+ if(_adapters.empty())
+ {
+ _count = 0;
+ }
+
+ //
+ // If the first adapter proxy is provided, store it in _proxies.
+ //
+ if(firstProxy)
+ {
+ assert(!_adapters.empty());
+ _proxies[_adapters[0].id] = firstProxy;
+ ++_lastAdapter;
+ }
}
- //
- // Otherwise, request as many adapters as required.
- //
- LocatorAdapterInfoSeq adapters;
+ virtual void
+ execute()
{
- Lock sync(*this);
- assert(_count > 0 && _lastAdapter != _adapters.end());
- for(unsigned int i = static_cast<unsigned int>(_proxies.size()); i < _count; ++i)
+ //
+ // Otherwise, request as many adapters as required.
+ //
+ LocatorAdapterInfoSeq adapters;
{
- if(_lastAdapter == _adapters.end())
+ Lock sync(*this);
+ for(unsigned int i = static_cast<unsigned int>(_proxies.size()); i < _count; ++i)
{
- _count = i;
- break;
+ if(_lastAdapter == _adapters.end())
+ {
+ _count = i;
+ break;
+ }
+ assert(_lastAdapter->proxy);
+ adapters.push_back(*_lastAdapter);
+ ++_lastAdapter;
+ }
+
+ //
+ // If there's no adapters to request, we're done, send the
+ // response.
+ //
+ if(_proxies.size() == _count)
+ {
+ sendResponse();
+ return;
}
- assert(_lastAdapter->proxy);
- adapters.push_back(*_lastAdapter);
- ++_lastAdapter;
}
- }
+
- for(LocatorAdapterInfoSeq::const_iterator p = adapters.begin(); p != adapters.end(); ++p)
- {
- if(_locator->getDirectProxy(*p, this))
+ for(LocatorAdapterInfoSeq::const_iterator p = adapters.begin(); p != adapters.end(); ++p)
{
- activating();
+ if(_locator->getDirectProxy(*p, this))
+ {
+ activating(p->id);
+ }
}
}
-}
-void
-LocatorI::Request::activating()
-{
- //
- // An adapter is being activated. If this is a request for a replica group, don't
- // wait for the activation to complete. Instead, we query the next adapter which
- // might be already active.
- //
- if(_replicaGroup)
+ virtual void
+ activating(const string&)
{
+ //
+ // An adapter is being activated. Don't wait for the activation to complete. Instead,
+ // we query the next adapter which might be already active.
+ //
LocatorAdapterInfo adapter;
do
{
@@ -237,150 +301,332 @@ LocatorI::Request::activating()
}
while(_locator->getDirectProxy(adapter, this));
}
-}
+
+ virtual void
+ exception(const string& id, const Ice::Exception& ex)
+ {
+ LocatorAdapterInfo adapter;
+ {
+ Lock sync(*this);
+ if(_proxies.size() == _count) // Nothing to do if we already sent the response.
+ {
+ return;
+ }
+
+ if(!_exception.get())
+ {
+ _exception.reset(ex.ice_clone());
+ }
+
+ if(_lastAdapter == _adapters.end())
+ {
+ --_count; // Expect one less adapter proxy if there's no more adapters to query.
+
+ //
+ // If we received all the required proxies, it's time to send the
+ // answer back to the client.
+ //
+ if(_count == _proxies.size())
+ {
+ sendResponse();
+ }
+ }
+ else
+ {
+ adapter = *_lastAdapter;
+ ++_lastAdapter;
+ }
+ }
-void
-LocatorI::Request::exception(const string& id, const Ice::Exception& ex)
-{
- LocatorAdapterInfo adapter;
+ if(adapter.proxy)
+ {
+ if(_locator->getDirectProxy(adapter, this))
+ {
+ activating(adapter.id);
+ }
+ }
+ }
+
+ virtual void
+ response(const string& id, const Ice::ObjectPrx& proxy)
{
Lock sync(*this);
+ assert(proxy);
if(_proxies.size() == _count) // Nothing to do if we already sent the response.
{
return;
}
- if(!_exception.get())
+
+ _proxies[id] = proxy->ice_identity(_locator->getCommunicator()->stringToIdentity("dummy"));
+
+ //
+ // If we received all the required proxies, it's time to send the
+ // answer back to the client.
+ //
+ if(_proxies.size() == _count)
{
- _exception.reset(ex.ice_clone());
+ sendResponse();
}
-
- if(_lastAdapter == _adapters.end())
+ }
+
+private:
+
+ void
+ sendResponse()
+ {
+ if(_proxies.size() == 1)
+ {
+ _amdCB->ice_response(_proxies.begin()->second);
+ }
+ else if(_proxies.empty())
{
- --_count; // Expect one less adapter proxy if there's no more adapters to query.
-
//
- // If we received all the required proxies, it's time to send the
- // answer back to the client.
+ // If there's no proxies, it's either because we couldn't contact the adapters or
+ // because the replica group has no members.
//
- if(_count == _proxies.size())
+ assert(_exception.get() || _adapters.empty());
+ if(_traceLevels->locator > 0)
{
- sendResponse();
+ Ice::Trace out(_traceLevels->logger, _traceLevels->locatorCat);
+ out << "couldn't resolve replica group `" << _id << "' endpoints:\n";
+ out << (_exception.get() ? toString(*_exception) : string("replica group is empty"));
}
+ _amdCB->ice_response(0);
}
- else
+ else if(_proxies.size() > 1)
{
- adapter = *_lastAdapter;
- ++_lastAdapter;
+ Ice::EndpointSeq endpoints;
+ endpoints.reserve(_proxies.size());
+ for(LocatorAdapterInfoSeq::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p)
+ {
+ map<string, Ice::ObjectPrx>::const_iterator q = _proxies.find(p->id);
+ if(q != _proxies.end())
+ {
+ Ice::EndpointSeq edpts = q->second->ice_getEndpoints();
+ endpoints.insert(endpoints.end(), edpts.begin(), edpts.end());
+ }
+ }
+
+ Ice::ObjectPrx proxy = _locator->getCommunicator()->stringToProxy("dummy:default");
+ _amdCB->ice_response(proxy->ice_endpoints(endpoints));
}
}
- if(adapter.proxy)
+ const Ice::AMD_Locator_findAdapterByIdPtr _amdCB;
+ const LocatorIPtr _locator;
+ const std::string _id;
+ LocatorAdapterInfoSeq _adapters;
+ const TraceLevelsPtr _traceLevels;
+ unsigned int _count;
+ LocatorAdapterInfoSeq::const_iterator _lastAdapter;
+ std::map<std::string, Ice::ObjectPrx> _proxies;
+ std::auto_ptr<Ice::Exception> _exception;
+};
+
+class RoundRobinRequest : public LocatorI::Request, public IceUtil::Mutex
+{
+public:
+
+ RoundRobinRequest(const Ice::AMD_Locator_findAdapterByIdPtr& amdCB,
+ const LocatorIPtr& locator,
+ const string& id,
+ const LocatorAdapterInfoSeq& adapters,
+ int count) :
+ _amdCB(amdCB),
+ _locator(locator),
+ _id(id),
+ _adapters(adapters),
+ _traceLevels(locator->getTraceLevels()),
+ _count(count),
+ _waitForActivation(false)
{
+ assert(_adapters.empty() || _count > 0);
+ }
+
+ virtual void
+ execute()
+ {
+ if(_adapters.empty())
+ {
+ if(_traceLevels->locator > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->locatorCat);
+ out << "couldn't resolve replica group `" << _id << "' endpoints:\nreplica group is empty";
+ }
+ _amdCB->ice_response(0);
+ return;
+ }
+
+ LocatorAdapterInfo adapter = _adapters[0];
+ assert(adapter.proxy);
if(_locator->getDirectProxy(adapter, this))
{
- activating();
+ activating(adapter.id);
}
}
-}
-void
-LocatorI::Request::response(const string& id, const Ice::ObjectPrx& proxy)
-{
- if(!proxy)
+ virtual void
+ activating(const string& id)
{
- exception(id, AdapterNotActiveException());
- return;
+ LocatorAdapterInfo adapter;
+ adapter.id = id;
+ do
+ {
+ Lock sync(*this);
+ if(_adapters.empty() || _waitForActivation)
+ {
+ return;
+ }
+ _activatingOrFailed.insert(adapter.id);
+ adapter = nextAdapter();
+ }
+ while(adapter.proxy && _locator->getDirectProxy(adapter, this));
}
- Lock sync(*this);
- if(_proxies.size() == _count) // Nothing to do if we already sent the response.
+ virtual void
+ response(const std::string& id, const Ice::ObjectPrx& proxy)
{
- return;
- }
-
- _proxies[id] = proxy->ice_identity(_locator->getCommunicator()->stringToIdentity("dummy"));
+ Lock sync(*this);
+ assert(proxy);
+ if(_adapters.empty() || id != _adapters[0].id)
+ {
+ return;
+ }
- //
- // If we received all the required proxies, it's time to send the
- // answer back to the client.
- //
- if(_proxies.size() == _count)
- {
- sendResponse();
+ if(_count > 1)
+ {
+ Ice::ObjectPrx p = proxy->ice_identity(_locator->getCommunicator()->stringToIdentity("dummy"));
+ LocatorI::RequestPtr request = new ReplicaGroupRequest(_amdCB, _locator, _id, _adapters, _count, p);
+ request->execute();
+ }
+ else
+ {
+ _amdCB->ice_response(proxy->ice_identity(_locator->getCommunicator()->stringToIdentity("dummy")));
+ }
+ _adapters.clear();
}
-}
-void
-LocatorI::Request::sendResponse()
-{
- int roundRobinCount = 0;
- if(_proxies.size() == 1)
+ virtual void
+ exception(const std::string& id, const Ice::Exception& ex)
{
- if(_roundRobin)
+ LocatorAdapterInfo adapter;
{
- for(LocatorAdapterInfoSeq::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p)
+ Lock sync(*this);
+ _failed.insert(id);
+ _activatingOrFailed.insert(id);
+
+ if(!_exception.get())
{
- if(_proxies.find(p->id) != _proxies.end())
- {
- break;
- }
- //
- // We count the number of object adapters which are inactive until we find
- // one active. This count will be used to update the round robin counter.
- //
- ++roundRobinCount;
+ _exception.reset(ex.ice_clone());
}
+
+ if(_adapters.empty() || id != _adapters[0].id)
+ {
+ return;
+ }
+
+ adapter = nextAdapter();
}
- _amdCB->ice_response(_proxies.begin()->second);
- }
- else if(_proxies.empty())
- {
- //
- // If there's no proxies, it's either because we couldn't
- // contact the adapters or because the replica group has
- // no members.
- //
- assert(_exception.get() || (_replicaGroup && _adapters.empty()));
- if(_traceLevels->locator > 0)
+ if(adapter.proxy && _locator->getDirectProxy(adapter, this))
{
- Ice::Trace out(_traceLevels->logger, _traceLevels->locatorCat);
- out << "couldn't resolve " << (_replicaGroup ? "replica group `" : "adapter `") << _id << "' endpoints:\n";
- out << (_exception.get() ? toString(*_exception) : string("replica group is empty"));
+ activating(adapter.id);
}
- _amdCB->ice_response(0);
}
- else if(_proxies.size() > 1)
+
+private:
+
+ LocatorAdapterInfo
+ nextAdapter()
{
- Ice::EndpointSeq endpoints;
- endpoints.reserve(_proxies.size());
- for(LocatorAdapterInfoSeq::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p)
+ bool replicaGroup;
+ bool roundRobin;
+
+ _adapters.clear();
+
+ try
{
- map<string, Ice::ObjectPrx>::const_iterator q = _proxies.find(p->id);
- if(q != _proxies.end())
+ if(!_waitForActivation)
{
- Ice::EndpointSeq edpts = q->second->ice_getEndpoints();
- endpoints.insert(endpoints.end(), edpts.begin(), edpts.end());
+ _locator->getAdapterInfo(_id, _adapters, _count, replicaGroup, roundRobin, _activatingOrFailed);
}
- else if(_roundRobin && endpoints.empty())
+
+ if(_waitForActivation || (_adapters.empty() && _activatingOrFailed.size() > _failed.size()))
{
//
- // We count the number of object adapters which are inactive until we find
- // one active. This count will be used to update the round robin counter.
+ // If there are no more adapters to try and some servers were being activated, we
+ // try again but this time we wait for the server activation.
//
- ++roundRobinCount;
+ _locator->getAdapterInfo(_id, _adapters, _count, replicaGroup, roundRobin, _failed);
+ _waitForActivation = true;
}
- }
- Ice::ObjectPrx proxy = _locator->getCommunicator()->stringToProxy("dummy:default");
- _amdCB->ice_response(proxy->ice_endpoints(endpoints));
+ if(!roundRobin)
+ {
+ LocatorI::RequestPtr request;
+ if(replicaGroup)
+ {
+ request = new ReplicaGroupRequest(_amdCB, _locator, _id, _adapters, _count, 0);
+ }
+ else
+ {
+ assert(!_adapters.empty());
+ request = new AdapterRequest(_amdCB, _locator, _adapters[0]);
+ }
+ request->execute();
+ _adapters.clear();
+ return LocatorAdapterInfo();
+ }
+ else if(!_adapters.empty())
+ {
+ return _adapters[0];
+ }
+ else
+ {
+ assert(_adapters.empty());
+ if(_traceLevels->locator > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->locatorCat);
+ out << "couldn't resolve replica group `" << _id << "' endpoints:\n";
+ out << (_exception.get() ? toString(*_exception) : string("replica group is empty"));
+ }
+ _amdCB->ice_response(0);
+ return LocatorAdapterInfo();
+ }
+ }
+ catch(const AdapterNotExistException&)
+ {
+ assert(_adapters.empty());
+ _amdCB->ice_exception(Ice::AdapterNotFoundException());
+ return LocatorAdapterInfo();
+ }
+ catch(const Ice::Exception& ex)
+ {
+ assert(_adapters.empty());
+ if(_traceLevels->locator > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->locatorCat);
+ out << "couldn't resolve replica group `" << _id << "' endpoints:\n" << toString(ex);
+ }
+ _amdCB->ice_response(0);
+ return LocatorAdapterInfo();
+ }
}
- if(_roundRobin)
- {
- _locator->removePendingRoundRobinRequest(_id, roundRobinCount);
- }
-}
+ const Ice::AMD_Locator_findAdapterByIdPtr _amdCB;
+ const LocatorIPtr _locator;
+ const std::string _id;
+ LocatorAdapterInfoSeq _adapters;
+ const TraceLevelsPtr _traceLevels;
+ int _count;
+ bool _waitForActivation;
+ set<string> _failed;
+ set<string> _activatingOrFailed;
+ std::auto_ptr<Ice::Exception> _exception;
+};
+
+};
+
LocatorI::LocatorI(const Ice::CommunicatorPtr& communicator,
const DatabasePtr& database,
@@ -444,22 +690,6 @@ LocatorI::findAdapterById_async(const Ice::AMD_Locator_findAdapterByIdPtr& cb,
const Ice::Current&) const
{
LocatorIPtr self = const_cast<LocatorI*>(this);
- bool pending = false;
- if(self->addPendingRoundRobinRequest(id, cb, true, pending)) // Add only if there's already round robin requests
- // pending.
- {
- //
- // Another request is currently resolving the adapter endpoints. We'll
- // answer this request once it's done.
- //
- return;
- }
-
- //
- // If no other request is resolving the adapter endpoints, resolve
- // the endpoints now.
- //
-
bool replicaGroup = false;
try
{
@@ -472,36 +702,24 @@ LocatorI::findAdapterById_async(const Ice::AMD_Locator_findAdapterByIdPtr& cb,
LocatorAdapterInfoSeq adapters;
bool roundRobin;
_database->getAdapter(id)->getLocatorAdapterInfo(adapters, count, replicaGroup, roundRobin);
-
- //
- // Round robin replica group requests are serialized. This is
- // required to make sure the round robin counter is accurate
- // even if some adapters are unreachable (bug 2576). For
- // adapters, and replica groups, there's no need to serialize
- // the requests.
- //
+ RequestPtr request;
if(roundRobin)
{
- if(self->addPendingRoundRobinRequest(id, cb, false, pending))
- {
- return;
- }
+ request = new RoundRobinRequest(cb, self, id, adapters, count);
}
- else if(pending)
+ else if(replicaGroup)
{
- self->removePendingRoundRobinRequest(id, 0);
+ request = new ReplicaGroupRequest(cb, self, id, adapters, count, 0);
+ }
+ else
+ {
+ assert(adapters.size() == 1);
+ request = new AdapterRequest(cb, self, adapters[0]);
}
-
- RequestPtr request = new Request(cb, self, id, replicaGroup, roundRobin, adapters, count);
request->execute();
}
catch(const AdapterNotExistException&)
{
- if(pending)
- {
- self->removePendingRoundRobinRequest(id, 0);
- }
-
try
{
cb->ice_response(_database->getAdapterDirectProxy(id));
@@ -514,11 +732,6 @@ LocatorI::findAdapterById_async(const Ice::AMD_Locator_findAdapterByIdPtr& cb,
}
catch(const Ice::Exception& ex)
{
- if(pending)
- {
- self->removePendingRoundRobinRequest(id, 0);
- }
-
const TraceLevelsPtr traceLevels = _database->getTraceLevels();
if(traceLevels->locator > 0)
{
@@ -568,78 +781,6 @@ LocatorI::getTraceLevels() const
}
bool
-LocatorI::addPendingRoundRobinRequest(const string& adapterId,
- const Ice::AMD_Locator_findAdapterByIdPtr& cb,
- bool addIfExists,
- bool& pending)
-{
- Lock sync(*this);
- pending = false;
- map<string, deque<Ice::AMD_Locator_findAdapterByIdPtr> >::iterator p = _resolves.find(adapterId);
- if(p == _resolves.end())
- {
- if(addIfExists)
- {
- return false;
- }
- p = _resolves.insert(make_pair(adapterId, deque<Ice::AMD_Locator_findAdapterByIdPtr>())).first;
- }
- else if(p->second.front().get() == cb.get())
- {
- pending = true;
- return false;
- }
-
- p->second.push_back(cb);
- return p->second.size() > 1;
-}
-
-void
-LocatorI::removePendingRoundRobinRequest(const string& adapterId, int roundRobinCount)
-{
- Ice::AMD_Locator_findAdapterByIdPtr cb;
- {
- Lock sync(*this);
-
- //
- // Bump the round robin counter. We bump the round robin counter by
- // the number of inactive adapters. This ensures that if the first
- // adapters are inactive, if the first adapter to be inactive is the
- // Nth adapter, the next adapter to be returned will be the Nth + 1.
- //
- if(roundRobinCount > 0)
- {
- try
- {
- _database->getAdapter(adapterId)->increaseRoundRobinCount(roundRobinCount);
- }
- catch(const Ice::Exception&)
- {
- // Ignore.
- }
- }
-
- map<string, deque<Ice::AMD_Locator_findAdapterByIdPtr> >::iterator p = _resolves.find(adapterId);
- assert(p != _resolves.end());
-
- p->second.pop_front();
- if(p->second.empty())
- {
- _resolves.erase(p);
- }
- else
- {
- cb = p->second.front();
- }
- }
-
- if(cb)
- {
- findAdapterById_async(cb, adapterId);
- }
-}
-
-bool
LocatorI::getDirectProxy(const LocatorAdapterInfo& adapter, const RequestPtr& request)
{
{
@@ -673,9 +814,19 @@ LocatorI::getDirectProxyResponse(const LocatorAdapterInfo& adapter, const Ice::O
_activating.erase(adapter.id);
}
- for(PendingRequests::iterator q = requests.begin(); q != requests.end(); ++q)
+ if(proxy)
{
- (*q)->response(adapter.id, proxy);
+ for(PendingRequests::iterator q = requests.begin(); q != requests.end(); ++q)
+ {
+ (*q)->response(adapter.id, proxy);
+ }
+ }
+ else
+ {
+ for(PendingRequests::iterator q = requests.begin(); q != requests.end(); ++q)
+ {
+ (*q)->exception(adapter.id, AdapterNotActiveException());
+ }
}
}
@@ -717,7 +868,7 @@ LocatorI::getDirectProxyException(const LocatorAdapterInfo& adapter, const Ice::
{
for(PendingRequests::iterator q = requests.begin(); q != requests.end(); ++q)
{
- (*q)->activating();
+ (*q)->activating(adapter.id);
}
AMI_Adapter_activatePtr amiCB = new AMI_Adapter_activateI(this, adapter);
@@ -732,3 +883,14 @@ LocatorI::getDirectProxyException(const LocatorAdapterInfo& adapter, const Ice::
}
}
}
+
+void
+LocatorI::getAdapterInfo(const string& id,
+ LocatorAdapterInfoSeq& adapters,
+ int& count,
+ bool& replicaGroup,
+ bool& roundRobin,
+ const set<string>& excludes)
+{
+ _database->getAdapter(id)->getLocatorAdapterInfo(adapters, count, replicaGroup, roundRobin, excludes);
+}
diff --git a/cpp/src/IceGrid/LocatorI.h b/cpp/src/IceGrid/LocatorI.h
index 51befd24e85..124b62b7dc1 100644
--- a/cpp/src/IceGrid/LocatorI.h
+++ b/cpp/src/IceGrid/LocatorI.h
@@ -34,40 +34,14 @@ class LocatorI : public Locator, public IceUtil::Mutex
{
public:
- class Request : public IceUtil::Mutex, public IceUtil::Shared
+ class Request : public IceUtil::Shared
{
public:
- Request(const Ice::AMD_Locator_findAdapterByIdPtr&, const LocatorIPtr&, const std::string&, bool, bool,
- const LocatorAdapterInfoSeq&, int);
-
- void execute();
- void response(const std::string&, const Ice::ObjectPrx&);
- void activating();
- void exception(const std::string&, const Ice::Exception&);
-
- virtual bool
- operator<(const Request& r) const
- {
- return this < &r;
- }
-
- private:
-
- void requestAdapter(const LocatorAdapterInfo&);
- void sendResponse();
-
- const Ice::AMD_Locator_findAdapterByIdPtr _amdCB;
- const LocatorIPtr _locator;
- const std::string _id;
- const bool _replicaGroup;
- const bool _roundRobin;
- LocatorAdapterInfoSeq _adapters;
- const TraceLevelsPtr _traceLevels;
- unsigned int _count;
- LocatorAdapterInfoSeq::const_iterator _lastAdapter;
- std::map<std::string, Ice::ObjectPrx> _proxies;
- std::auto_ptr<Ice::Exception> _exception;
+ virtual void execute() = 0;
+ virtual void activating(const std::string&) = 0;
+ virtual void response(const std::string&, const Ice::ObjectPrx&) = 0;
+ virtual void exception(const std::string&, const Ice::Exception&) = 0;
};
typedef IceUtil::Handle<Request> RequestPtr;
@@ -87,13 +61,12 @@ public:
const Ice::CommunicatorPtr& getCommunicator() const;
const TraceLevelsPtr& getTraceLevels() const;
- bool addPendingRoundRobinRequest(const std::string&, const Ice::AMD_Locator_findAdapterByIdPtr&, bool, bool&);
- void removePendingRoundRobinRequest(const std::string&, int);
-
bool getDirectProxy(const LocatorAdapterInfo&, const RequestPtr&);
void getDirectProxyResponse(const LocatorAdapterInfo&, const Ice::ObjectPrx&);
void getDirectProxyException(const LocatorAdapterInfo&, const Ice::Exception&);
+ void getAdapterInfo(const std::string&, LocatorAdapterInfoSeq&, int&, bool&, bool&, const std::set<std::string>&);
+
protected:
const Ice::CommunicatorPtr _communicator;
@@ -106,8 +79,6 @@ protected:
typedef std::map<std::string, PendingRequests> PendingRequestsMap;
PendingRequestsMap _pendingRequests;
std::set<std::string> _activating;
-
- std::map<std::string, std::deque<Ice::AMD_Locator_findAdapterByIdPtr> > _resolves;
};
}
diff --git a/cpp/src/IceGrid/NodeI.cpp b/cpp/src/IceGrid/NodeI.cpp
index 6381b39760e..77ed21db79e 100644
--- a/cpp/src/IceGrid/NodeI.cpp
+++ b/cpp/src/IceGrid/NodeI.cpp
@@ -831,9 +831,17 @@ NodeI::read(const string& filename, Ice::Long pos, int size, Ice::Long& newPos,
}
void
-NodeI::destroy()
+NodeI::shutdown()
{
IceUtil::Mutex::Lock sync(_serversLock);
+ for(map<string, set<ServerIPtr> >::const_iterator p = _serversByApplication.begin();
+ p != _serversByApplication.end(); ++p)
+ {
+ for(set<ServerIPtr>::const_iterator q = p->second.begin(); q != p->second.end(); ++q)
+ {
+ (*q)->shutdown();
+ }
+ }
_serversByApplication.clear();
}
diff --git a/cpp/src/IceGrid/NodeI.h b/cpp/src/IceGrid/NodeI.h
index 087d661a49d..46c6470bb83 100644
--- a/cpp/src/IceGrid/NodeI.h
+++ b/cpp/src/IceGrid/NodeI.h
@@ -92,7 +92,7 @@ public:
virtual Ice::Long getOffsetFromEnd(const std::string&, int, const Ice::Current&) const;
virtual bool read(const std::string&, Ice::Long, int, Ice::Long&, Ice::StringSeq&, const Ice::Current&) const;
- void destroy();
+ void shutdown();
IceUtil::TimerPtr getTimer() const;
Ice::CommunicatorPtr getCommunicator() const;
diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp
index 79b5cd80b67..b01219c4e46 100644
--- a/cpp/src/IceGrid/ServerI.cpp
+++ b/cpp/src/IceGrid/ServerI.cpp
@@ -1694,6 +1694,14 @@ ServerI::terminated(const string& msg, int status)
}
void
+ServerI::shutdown()
+{
+ Lock sync(*this);
+ assert(_state == ServerI::Inactive);
+ _timerTask = 0;
+}
+
+void
ServerI::update()
{
ServerCommandPtr command;
diff --git a/cpp/src/IceGrid/ServerI.h b/cpp/src/IceGrid/ServerI.h
index 375a5c1fc80..9d04b017b7f 100644
--- a/cpp/src/IceGrid/ServerI.h
+++ b/cpp/src/IceGrid/ServerI.h
@@ -109,6 +109,7 @@ public:
void update();
void destroy();
void terminated(const std::string&, int);
+ void shutdown();
//
// A proxy to the Process facet of the real Admin object; called by the AdminFacade servant implementation
diff --git a/cpp/src/IceGridLib/IceGrid.rc b/cpp/src/IceGridLib/IceGrid.rc
index 05dd987c313..da7d0050c1b 100644
--- a/cpp/src/IceGridLib/IceGrid.rc
+++ b/cpp/src/IceGridLib/IceGrid.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceGrid DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IcePatch2/IcePatch2.rc b/cpp/src/IcePatch2/IcePatch2.rc
index 1a332ad15cd..ddea01a5a08 100644
--- a/cpp/src/IcePatch2/IcePatch2.rc
+++ b/cpp/src/IcePatch2/IcePatch2.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IcePatch2 DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IcePatch2/IcePatch2Calc.rc b/cpp/src/IcePatch2/IcePatch2Calc.rc
index d8669cbf63c..dc2cad85ee1 100644
--- a/cpp/src/IcePatch2/IcePatch2Calc.rc
+++ b/cpp/src/IcePatch2/IcePatch2Calc.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IcePatch2 Calc\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icepatch2calc\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icepatch2calc.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IcePatch2/IcePatch2Client.rc b/cpp/src/IcePatch2/IcePatch2Client.rc
index 217e315d03c..3bc39547149 100644
--- a/cpp/src/IcePatch2/IcePatch2Client.rc
+++ b/cpp/src/IcePatch2/IcePatch2Client.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IcePatch2 Client\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icepatch2client\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icepatch2client.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IcePatch2/IcePatch2Server.rc b/cpp/src/IcePatch2/IcePatch2Server.rc
index 20f04919b87..c5c2de68feb 100644
--- a/cpp/src/IcePatch2/IcePatch2Server.rc
+++ b/cpp/src/IcePatch2/IcePatch2Server.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IcePatch2 Server\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icepatch2server\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icepatch2server.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceSSL/AcceptorI.cpp b/cpp/src/IceSSL/AcceptorI.cpp
index 677f8235198..0b52afd93fe 100644
--- a/cpp/src/IceSSL/AcceptorI.cpp
+++ b/cpp/src/IceSSL/AcceptorI.cpp
@@ -67,12 +67,12 @@ IceInternal::TransceiverPtr
IceSSL::AcceptorI::accept()
{
//
- // The plugin may not be initialized.
+ // The plug-in may not be initialized.
//
if(!_instance->context())
{
PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: plugin is not initialized";
+ ex.reason = "IceSSL: plug-in is not initialized";
throw ex;
}
diff --git a/cpp/src/IceSSL/ConnectorI.cpp b/cpp/src/IceSSL/ConnectorI.cpp
index 9d03d2c1a47..aa034e66a18 100644
--- a/cpp/src/IceSSL/ConnectorI.cpp
+++ b/cpp/src/IceSSL/ConnectorI.cpp
@@ -25,12 +25,12 @@ IceInternal::TransceiverPtr
IceSSL::ConnectorI::connect()
{
//
- // The plugin may not be initialized.
+ // The plug-in may not be initialized.
//
if(!_instance->context())
{
PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: plugin is not initialized";
+ ex.reason = "IceSSL: plug-in is not initialized";
throw ex;
}
diff --git a/cpp/src/IceSSL/IceSSL.rc b/cpp/src/IceSSL/IceSSL.rc
index 126224986be..8e5ce643742 100644
--- a/cpp/src/IceSSL/IceSSL.rc
+++ b/cpp/src/IceSSL/IceSSL.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceSSL DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceSSL/Instance.cpp b/cpp/src/IceSSL/Instance.cpp
index b3e0a77388f..9c4875f6267 100644
--- a/cpp/src/IceSSL/Instance.cpp
+++ b/cpp/src/IceSSL/Instance.cpp
@@ -233,7 +233,7 @@ IceSSL::Instance::Instance(const CommunicatorPtr& communicator) :
//
// Register the endpoint factory. We have to do this now, rather than
// in initialize, because the communicator may need to interpret
- // proxies before the plugin is fully initialized.
+ // proxies before the plug-in is fully initialized.
//
_facade->addEndpointFactory(new EndpointFactoryI(this));
@@ -662,7 +662,7 @@ IceSSL::Instance::context(SSL_CTX* context)
if(_ctx)
{
PluginInitializationException ex(__FILE__, __LINE__);
- ex.reason = "IceSSL: plugin is already initialized";
+ ex.reason = "IceSSL: plug-in is already initialized";
throw ex;
}
diff --git a/cpp/src/IceSSL/PluginI.cpp b/cpp/src/IceSSL/PluginI.cpp
index a8595334547..e06cdb2eec9 100644
--- a/cpp/src/IceSSL/PluginI.cpp
+++ b/cpp/src/IceSSL/PluginI.cpp
@@ -19,7 +19,7 @@ using namespace Ice;
using namespace IceSSL;
//
-// Plugin factory function.
+// Plug-in factory function.
//
extern "C"
{
diff --git a/cpp/src/IceStorm/IceStorm.rc b/cpp/src/IceStorm/IceStorm.rc
index ca1293614cd..e5cfd561100 100644
--- a/cpp/src/IceStorm/IceStorm.rc
+++ b/cpp/src/IceStorm/IceStorm.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceStorm DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceStorm/IceStormAdmin.rc b/cpp/src/IceStorm/IceStormAdmin.rc
index 1d14f08c1ab..33065629bae 100644
--- a/cpp/src/IceStorm/IceStormAdmin.rc
+++ b/cpp/src/IceStorm/IceStormAdmin.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceStorm Admin\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icestormadmin\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icestormadmin.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceStorm/IceStormMigrate.rc b/cpp/src/IceStorm/IceStormMigrate.rc
index 8ab9d0dc857..f3f24994f66 100644
--- a/cpp/src/IceStorm/IceStormMigrate.rc
+++ b/cpp/src/IceStorm/IceStormMigrate.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceStorm Migrate\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "icestormmigrate\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "icestormmigrate.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceStorm/IceStormService.rc b/cpp/src/IceStorm/IceStormService.rc
index 1a950d549cc..84fc9950959 100644
--- a/cpp/src/IceStorm/IceStormService.rc
+++ b/cpp/src/IceStorm/IceStormService.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceStorm Service DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceUtil/IceUtil.rc b/cpp/src/IceUtil/IceUtil.rc
index 14a7933927a..956c6589bc1 100644
--- a/cpp/src/IceUtil/IceUtil.rc
+++ b/cpp/src/IceUtil/IceUtil.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Ice Utilities DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/IceXML/IceXML.rc b/cpp/src/IceXML/IceXML.rc
index 1cdb092e022..da67d911da0 100644
--- a/cpp/src/IceXML/IceXML.rc
+++ b/cpp/src/IceXML/IceXML.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "IceXML DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/Slice/Slice.rc b/cpp/src/Slice/Slice.rc
index ab6c94bb44b..4e322159365 100644
--- a/cpp/src/Slice/Slice.rc
+++ b/cpp/src/Slice/Slice.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -23,12 +23,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice Utilities DLL\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", INTERNALNAME
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", ORIGINALFILENAME
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/ca/iceca b/cpp/src/ca/iceca
index 06db0827a7f..14d0e13e848 100755
--- a/cpp/src/ca/iceca
+++ b/cpp/src/ca/iceca
@@ -104,7 +104,7 @@ if sys.argv[script] == "import":
# script ../lib). For development purposes we also check ".".
#
checkLocations = [".", os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "..", "lib")),
- "/usr/share/Ice-3.3.0"]
+ "/usr/share/Ice-3.3.1"]
for bindir in checkLocations:
bindir = os.path.normpath(bindir)
if os.path.exists(os.path.join(bindir, "ImportKey.class")):
diff --git a/cpp/src/iceserviceinstall/IceServiceInstall.rc b/cpp/src/iceserviceinstall/IceServiceInstall.rc
index e45b08059ca..ec031cee122 100644
--- a/cpp/src/iceserviceinstall/IceServiceInstall.rc
+++ b/cpp/src/iceserviceinstall/IceServiceInstall.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Service Installer\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "iceserviceinstall\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "iceserviceinstall.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2cpp/Slice2Cpp.rc b/cpp/src/slice2cpp/Slice2Cpp.rc
index d5a4b4a90d5..f7fe1cd95b6 100644
--- a/cpp/src/slice2cpp/Slice2Cpp.rc
+++ b/cpp/src/slice2cpp/Slice2Cpp.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To C++ Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2cpp\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2cpp.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2cs/Slice2Cs.rc b/cpp/src/slice2cs/Slice2Cs.rc
index 7adbc810180..5d9b7390e83 100644
--- a/cpp/src/slice2cs/Slice2Cs.rc
+++ b/cpp/src/slice2cs/Slice2Cs.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To C# Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2cs\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2cs.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2docbook/Slice2Docbook.rc b/cpp/src/slice2docbook/Slice2Docbook.rc
index 41b5ba967d6..aa15951a456 100644
--- a/cpp/src/slice2docbook/Slice2Docbook.rc
+++ b/cpp/src/slice2docbook/Slice2Docbook.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To Docbook Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2docbook\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2docbook.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2freeze/Slice2Freeze.rc b/cpp/src/slice2freeze/Slice2Freeze.rc
index 1807c3c99b6..8e12b314086 100644
--- a/cpp/src/slice2freeze/Slice2Freeze.rc
+++ b/cpp/src/slice2freeze/Slice2Freeze.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To Freeze Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2freeze\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2freeze.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2freezej/Slice2FreezeJ.rc b/cpp/src/slice2freezej/Slice2FreezeJ.rc
index fa382c34d68..0eb44a45fd7 100644
--- a/cpp/src/slice2freezej/Slice2FreezeJ.rc
+++ b/cpp/src/slice2freezej/Slice2FreezeJ.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To Freeze for Java Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2freezej\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2freezej.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2html/Slice2Html.rc b/cpp/src/slice2html/Slice2Html.rc
index cfa34c2e18b..bd2e770ce9b 100644
--- a/cpp/src/slice2html/Slice2Html.rc
+++ b/cpp/src/slice2html/Slice2Html.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To HTML Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2html\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2html.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2java/Slice2Java.rc b/cpp/src/slice2java/Slice2Java.rc
index f338b93635f..5f454c00e63 100644
--- a/cpp/src/slice2java/Slice2Java.rc
+++ b/cpp/src/slice2java/Slice2Java.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To Java Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2java\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2java.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2py/Slice2Py.rc b/cpp/src/slice2py/Slice2Py.rc
index 9d3a470392a..31db7dfc054 100644
--- a/cpp/src/slice2py/Slice2Py.rc
+++ b/cpp/src/slice2py/Slice2Py.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To Python Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2py\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2py.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"
diff --git a/cpp/src/slice2rb/Slice2Rb.rc b/cpp/src/slice2rb/Slice2Rb.rc
index 8c7d59b4671..6ff1a72c82a 100644
--- a/cpp/src/slice2rb/Slice2Rb.rc
+++ b/cpp/src/slice2rb/Slice2Rb.rc
@@ -1,8 +1,8 @@
#include "winver.h"
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,3,0,0
- PRODUCTVERSION 3,3,0,0
+ FILEVERSION 3,3,1,0
+ PRODUCTVERSION 3,3,1,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
@@ -19,12 +19,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "ZeroC, Inc.\0"
VALUE "FileDescription", "Slice To Ruby Translator\0"
- VALUE "FileVersion", "3.3.0\0"
+ VALUE "FileVersion", "3.3.1\0"
VALUE "InternalName", "slice2rb\0"
VALUE "LegalCopyright", "Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.\0"
VALUE "OriginalFilename", "slice2rb.exe\0"
VALUE "ProductName", "Ice\0"
- VALUE "ProductVersion", "3.3.0\0"
+ VALUE "ProductVersion", "3.3.1\0"
END
END
BLOCK "VarFileInfo"