diff -ruN --exclude=CVS ../ice.orig/Makefile Makefile --- ../ice.orig/Makefile 2012-02-18 14:38:25.000000000 +0100 +++ Makefile 2012-03-05 02:14:10.000000000 +0100 @@ -7,7 +7,7 @@ PORTNAME= Ice PORTVERSION= 3.4.2 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel MASTER_SITES= http://download.zeroc.com/Ice/3.4/ @@ -17,6 +17,15 @@ LIB_DEPENDS= expat.6:${PORTSDIR}/textproc/expat2 \ mcpp.3:${PORTSDIR}/devel/mcpp +OPTIONS= TESTS "Build and run tests (requires lang/python)" on \ + DEMOS "Build demos" on + +.include + +.if defined(WITH_TESTS) +USE_PYTHON_BUILD= yes +.endif + USE_GMAKE= yes USE_ICONV= yes USE_BDB= 42+ @@ -45,6 +54,14 @@ MAKE_ENV= LP64=yes .endif +.if !defined(WITH_TESTS) +MAKE_ENV+= NOTESTS=yes +.endif + +.if !defined(WITH_DEMOS) +MAKE_ENV+= NODEMOS=yes +.endif + .if defined(NOPORTDOCS) MAKE_ENV+= NOPORTDOCS=yes .endif @@ -69,4 +86,12 @@ ${REINPLACE_CMD} '/LICENSE/s/prefix/install_slicedir/' \ ${WRKSRC}/config/Make.common.rules +.if defined(WITH_TESTS) +TEST_CMD= @cd ${BUILD_WRKSRC} && ${PYTHON_CMD} ./allTests.py +post-build: + ${TEST_CMD} +regression-test test: build + ${TEST_CMD} +.endif + .include diff -ruN --exclude=CVS ../ice.orig/files/patch-Makefile files/patch-Makefile --- ../ice.orig/files/patch-Makefile 2011-06-28 15:44:00.000000000 +0200 +++ files/patch-Makefile 2012-03-04 21:39:20.000000000 +0100 @@ -1,12 +1,26 @@ ---- cpp/Makefile.bak 2008-05-16 19:24:00.000000000 +0200 -+++ cpp/Makefile 2008-07-31 13:37:25.000000000 +0200 -@@ -12,6 +12,9 @@ +--- cpp.orig/Makefile 2012-03-04 21:38:42.000000000 +0100 ++++ cpp/Makefile 2012-03-04 21:38:42.000000000 +0100 +@@ -11,7 +11,22 @@ + include $(top_srcdir)/config/Make.rules - SUBDIRS = config src include test demo +-SUBDIRS = config src include test demo ++SUBDIRS = config src include ++ ++ifeq ($(NOTESTS),) ++SUBDIRS += test ++endif ++ ++ifeq ($(NODEMOS),) ++SUBDIRS += demo ++endif ++ +ifeq ($(NOPORTDOCS),) +SUBDIRS += doc +endif ++ ++ INSTALL_SUBDIRS = $(install_bindir) $(install_libdir) $(install_includedir) $(install_configdir) ++ INSTALL_SUBDIRS = $(install_bindir) $(install_libdir) $(install_includedir) $(install_configdir) diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-allTests.py files/patch-cpp-allTests.py --- ../ice.orig/files/patch-cpp-allTests.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-allTests.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,30 @@ +--- cpp.orig/allTests.py 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/allTests.py 2012-03-04 20:14:52.000000000 +0100 +@@ -25,6 +25,7 @@ + # List of all basic tests. + # + tests = [ ++ + ("IceUtil/condvar", ["once", "win32only"]), + ("IceUtil/thread", ["once"]), + ("IceUtil/unicode", ["once"]), +@@ -62,7 +63,7 @@ + ("Ice/servantLocator", ["core"]), + ("Ice/interceptor", ["core"]), + ("Ice/stringConverter", ["core"]), +- ("Ice/udp", ["core"]), ++ ("Ice/udp", ["core", "nofreebsdjail"]), + ("Ice/defaultServant", ["core"]), + ("Ice/defaultValue", ["core"]), + ("Ice/invoke", ["core", "novc6"]), +@@ -106,8 +107,8 @@ + # + if TestUtil.isWin32() or os.getuid() == 0: + tests += [ +- ("IceUtil/priority", ["core", "nodarwin"]), +- ("Ice/threadPoolPriority", ["core", "nodarwin"]) ++ ("IceUtil/priority", ["core", "nodarwin", "nofreebsd"]), ++ ("Ice/threadPoolPriority", ["core", "nodarwin", "nofreebsd"]) + ] + + if __name__ == "__main__": diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-README files/patch-cpp-demo-IceGrid-secure-README --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-README 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-README 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/demo/IceGrid/secure/README 2011-06-15 21:44:00.000000000 +0200 ++++ cpp/demo/IceGrid/secure/README 2012-03-04 19:55:44.000000000 +0100 +@@ -31,9 +31,10 @@ + the filesystem permissions to restrict access to the certificate. + + Once the certificates are generated, you can start the IceGrid +-registry, node, and Glacier2 router: ++registries, node, and Glacier2 router: + +-$ icegridregistry --Ice.Config=config.registry ++$ icegridregistry --Ice.Config=config.master ++$ icegridregistry --Ice.Config=config.slave + $ icegridnode --Ice.Config=config.node + $ glacier2router --Ice.Config=config.glacier2 + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-application.xml files/patch-cpp-demo-IceGrid-secure-application.xml --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-application.xml 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-application.xml 2012-03-04 22:11:04.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/demo/IceGrid/secure/application.xml 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/demo/IceGrid/secure/application.xml 2012-03-04 19:55:44.000000000 +0100 +@@ -20,8 +20,8 @@ + + + +- +- ++ ++ + + + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.admin files/patch-cpp-demo-IceGrid-secure-config.admin --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.admin 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.admin 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/demo/IceGrid/secure/config.admin 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/demo/IceGrid/secure/config.admin 2012-03-04 19:55:44.000000000 +0100 +@@ -14,7 +14,7 @@ + # SSL Configuration + # + IceSSL.DefaultDir=certs +-IceSSL.TrustOnly.Client=CN="IceGrid Registry";CN="Glacier2" ++IceSSL.TrustOnly.Client=CN="Master";CN="Slave";CN="Glacier2" + + # C++ configuration + Ice.Plugin.IceSSL.cpp=IceSSL:createIceSSL diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.client files/patch-cpp-demo-IceGrid-secure-config.client --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.client 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.client 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/demo/IceGrid/secure/config.client 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/demo/IceGrid/secure/config.client 2012-03-04 19:55:44.000000000 +0100 +@@ -1,7 +1,7 @@ + # + # The IceGrid locator proxy. + # +-Ice.Default.Locator=DemoIceGrid/Locator:tcp -p 4061 ++Ice.Default.Locator=DemoIceGrid/Locator:tcp -p 4061:tcp -p 14061 + + # + # Trace properties. diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.master files/patch-cpp-demo-IceGrid-secure-config.master --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.master 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.master 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,64 @@ +--- cpp.orig/demo/IceGrid/secure/config.master 2012-03-04 19:55:44.000000000 +0100 ++++ cpp/demo/IceGrid/secure/config.master 2012-03-04 19:55:44.000000000 +0100 +@@ -0,0 +1,61 @@ ++# ++# The IceGrid instance name. ++# ++IceGrid.InstanceName=DemoIceGrid ++ ++# ++# IceGrid registry configuration. ++# ++IceGrid.Registry.Client.Endpoints=tcp -p 4061 -t 10000:ssl -p 4062 -t 10000 ++IceGrid.Registry.Server.Endpoints=ssl -t 10000 ++IceGrid.Registry.Internal.Endpoints=ssl -t 10000 ++IceGrid.Registry.Data=db/master ++ ++# ++# Ensure that nodes and slaves connecting to this registry have a name ++# matching the certificate CN. ++# ++IceGrid.Registry.RequireNodeCertCN=1 ++IceGrid.Registry.RequireReplicaCertCN=1 ++ ++# ++# IceGrid admin clients must use a secure connection to connect to the ++# registry or use Glacier2. ++# ++IceGrid.Registry.AdminSessionManager.Endpoints=ssl -t 10000 ++IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier ++ ++# ++# IceGrid SQL configuration if using SQL database. ++# ++#Ice.Plugin.DB=IceGridSqlDB:createSqlDB ++#IceGrid.SQL.DatabaseType=QSQLITE ++#IceGrid.SQL.DatabaseName=db/master/Registry.db ++ ++# ++# Trace properties. ++# ++Ice.ProgramName=Master ++IceGrid.Registry.Trace.Node=2 ++IceGrid.Registry.Trace.Replica=2 ++ ++# ++# SSL Configuration ++# ++Ice.Plugin.IceSSL=IceSSL:createIceSSL ++IceSSL.DefaultDir=certs ++IceSSL.CertAuthFile=ca_cert.pem ++IceSSL.CertFile=master_cert.pem ++IceSSL.KeyFile=master_key.pem ++ ++# ++# Don't require certificates. This is useful for admin clients that don't ++# use certificate but still need to establish a secure connection for the ++# username/password authentication ++# ++IceSSL.VerifyPeer=1 ++ ++IceSSL.TrustOnly.Client=CN="Master";CN="Slave";CN="Node";CN="Glacier2" ++IceSSL.TrustOnly.Server.IceGrid.Registry.Server=CN="Server" ++IceSSL.TrustOnly.Server.IceGrid.Registry.Internal=CN="Node";CN="Master";CN="Slave" ++IceSSL.TrustOnly.Server.IceGrid.Registry.AdminSessionManager=CN="Glacier2" diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.node files/patch-cpp-demo-IceGrid-secure-config.node --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.node 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.node 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,19 @@ +--- cpp.orig/demo/IceGrid/secure/config.node 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/demo/IceGrid/secure/config.node 2012-03-04 19:55:44.000000000 +0100 +@@ -1,7 +1,7 @@ + # + # The IceGrid locator proxy. + # +-Ice.Default.Locator=DemoIceGrid/Locator:ssl -p 4062 -t 10000 ++Ice.Default.Locator=DemoIceGrid/Locator:ssl -p 4062 -t 10000:ssl -p 14062 -t 10000 + + # + # IceGrid node configuration. +@@ -26,5 +26,5 @@ + IceSSL.CertFile=node_cert.pem + IceSSL.KeyFile=node_key.pem + +-IceSSL.TrustOnly.Client=CN="Server";CN="IceGrid Registry" +-IceSSL.TrustOnly.Server=CN="IceGrid Registry" ++IceSSL.TrustOnly.Client=CN="Server";CN="Master";CN="Slave" ++IceSSL.TrustOnly.Server=CN="Master";CN="Slave" diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.registry files/patch-cpp-demo-IceGrid-secure-config.registry --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.registry 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.registry 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,57 @@ +--- cpp.orig/demo/IceGrid/secure/config.registry 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/demo/IceGrid/secure/config.registry 2012-03-04 19:55:44.000000000 +0100 +@@ -1,54 +0,0 @@ +-# +-# The IceGrid instance name. +-# +-IceGrid.InstanceName=DemoIceGrid +- +-# +-# IceGrid registry configuration. +-# +-IceGrid.Registry.Client.Endpoints=tcp -p 4061 -t 10000:ssl -p 4062 -t 10000 +-IceGrid.Registry.Server.Endpoints=ssl -t 10000 +-IceGrid.Registry.Internal.Endpoints=ssl -t 10000 +-IceGrid.Registry.Data=db/registry +- +-# +-# IceGrid admin clients must use a secure connection to connect to the +-# registry or use Glacier2. +-# +-IceGrid.Registry.AdminSessionManager.Endpoints=ssl -t 10000 +-IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier +- +-# +-# IceGrid SQL configuration if using SQL database. +-# +-#Ice.Plugin.DB=IceGridSqlDB:createSqlDB +-#IceGrid.SQL.DatabaseType=QSQLITE +-#IceGrid.SQL.DatabaseName=db/registry/Registry.db +- +-# +-# Trace properties. +-# +-Ice.ProgramName=Registry +-IceGrid.Registry.Trace.Node=2 +-IceGrid.Registry.Trace.Replica=2 +- +-# +-# SSL Configuration +-# +-Ice.Plugin.IceSSL=IceSSL:createIceSSL +-IceSSL.DefaultDir=certs +-IceSSL.CertAuthFile=ca_cert.pem +-IceSSL.CertFile=registry_cert.pem +-IceSSL.KeyFile=registry_key.pem +- +-# +-# Don't require certificates. This is useful for admin clients that don't +-# use certificate but still need to establish a secure connection for the +-# username/password authentication +-# +-IceSSL.VerifyPeer=1 +- +-IceSSL.TrustOnly.Client=CN="IceGrid Registry";CN="IceGrid Node";CN="Glacier2" +-IceSSL.TrustOnly.Server.IceGrid.Registry.Server=CN="Server" +-IceSSL.TrustOnly.Server.IceGrid.Registry.Internal=CN="IceGrid Node";CN="IceGrid Registry" +-IceSSL.TrustOnly.Server.IceGrid.Registry.AdminSessionManager=CN="Glacier2" diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.slave files/patch-cpp-demo-IceGrid-secure-config.slave --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-config.slave 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-config.slave 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,69 @@ +--- cpp.orig/demo/IceGrid/secure/config.slave 2012-03-04 19:55:44.000000000 +0100 ++++ cpp/demo/IceGrid/secure/config.slave 2012-03-04 19:55:44.000000000 +0100 +@@ -0,0 +1,66 @@ ++# ++# The IceGrid locator proxy. ++# ++Ice.Default.Locator=DemoIceGrid/Locator:ssl -p 4062 -t 10000 ++ ++# ++# The IceGrid instance name. ++# ++IceGrid.InstanceName=DemoIceGrid ++ ++# ++# IceGrid registry configuration. ++# ++IceGrid.Registry.Client.Endpoints=tcp -p 14061 -t 10000:ssl -p 14062 -t 10000 ++IceGrid.Registry.Server.Endpoints=ssl -t 10000 ++IceGrid.Registry.Internal.Endpoints=ssl -t 10000 ++IceGrid.Registry.Data=db/slave ++IceGrid.Registry.ReplicaName=Slave ++ ++# ++# Ensure that nodes connecting to this registry have a name matching ++# the certificate CN. ++# ++IceGrid.Registry.RequireNodeCertCN=1 ++ ++# ++# IceGrid admin clients must use a secure connection to connect to the ++# registry or use Glacier2. ++# ++IceGrid.Registry.AdminSessionManager.Endpoints=ssl -t 10000 ++IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier ++ ++# ++# IceGrid SQL configuration if using SQL database. ++# ++#Ice.Plugin.DB=IceGridSqlDB:createSqlDB ++#IceGrid.SQL.DatabaseType=QSQLITE ++#IceGrid.SQL.DatabaseName=db/slave/Registry.db ++ ++# ++# Trace properties. ++# ++Ice.ProgramName=Slave ++IceGrid.Registry.Trace.Node=2 ++IceGrid.Registry.Trace.Replica=2 ++ ++# ++# SSL Configuration ++# ++Ice.Plugin.IceSSL=IceSSL:createIceSSL ++IceSSL.DefaultDir=certs ++IceSSL.CertAuthFile=ca_cert.pem ++IceSSL.CertFile=slave_cert.pem ++IceSSL.KeyFile=slave_key.pem ++ ++# ++# Don't require certificates. This is useful for admin clients that don't ++# use certificate but still need to establish a secure connection for the ++# username/password authentication ++# ++IceSSL.VerifyPeer=1 ++ ++IceSSL.TrustOnly.Client=CN="Master";CN="Slave";CN="Node";CN="Glacier2" ++IceSSL.TrustOnly.Server.IceGrid.Registry.Server=CN="Server" ++IceSSL.TrustOnly.Server.IceGrid.Registry.Internal=CN="Node";CN="Master";CN="Slave" ++IceSSL.TrustOnly.Server.IceGrid.Registry.AdminSessionManager=CN="Glacier2" diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-demo-IceGrid-secure-makecerts.py files/patch-cpp-demo-IceGrid-secure-makecerts.py --- ../ice.orig/files/patch-cpp-demo-IceGrid-secure-makecerts.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-demo-IceGrid-secure-makecerts.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,14 @@ +--- cpp.orig/demo/IceGrid/secure/makecerts.py 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/demo/IceGrid/secure/makecerts.py 2012-03-04 19:55:44.000000000 +0100 +@@ -44,8 +44,9 @@ + print + print + +-createCertificate("registry", "IceGrid Registry") +-createCertificate("node", "IceGrid Node") ++createCertificate("master", "Master") ++createCertificate("slave", "Slave") ++createCertificate("node", "Node") + createCertificate("glacier2", "Glacier2") + createCertificate("server", "Server") + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Freeze-Map.h files/patch-cpp-include-Freeze-Map.h --- ../ice.orig/files/patch-cpp-include-Freeze-Map.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Freeze-Map.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/include/Freeze/Map.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Freeze/Map.h 2012-03-04 20:14:52.000000000 +0100 +@@ -426,7 +426,7 @@ + + ConstIterator(MapHelper& mapHelper, const Ice::CommunicatorPtr& communicator) : + _helper(IteratorHelper::create(mapHelper, true)), +- _communicator(_communicator), ++ _communicator(communicator), + _refValid(false) + { + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-Buffer.h files/patch-cpp-include-Ice-Buffer.h --- ../ice.orig/files/patch-cpp-include-Ice-Buffer.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-Buffer.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,10 @@ +--- cpp.orig/include/Ice/Buffer.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/Buffer.h 2012-03-04 20:14:52.000000000 +0100 +@@ -10,6 +10,7 @@ + #ifndef ICEE_BUFFER_H + #define ICEE_BUFFER_H + ++#include + #include + + namespace IceInternal diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-ConnectionIF.h files/patch-cpp-include-Ice-ConnectionIF.h --- ../ice.orig/files/patch-cpp-include-Ice-ConnectionIF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-ConnectionIF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/include/Ice/ConnectionIF.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/ConnectionIF.h 2012-03-04 20:14:52.000000000 +0100 +@@ -17,13 +17,13 @@ + { + + class ConnectionI; ++ICE_API Ice::LocalObject* upCast(Ice::ConnectionI*); + + } + + namespace IceInternal + { + +-ICE_API Ice::LocalObject* upCast(Ice::ConnectionI*); + + enum AsyncStatus + { diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-IconvStringConverter.h files/patch-cpp-include-Ice-IconvStringConverter.h --- ../ice.orig/files/patch-cpp-include-Ice-IconvStringConverter.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-IconvStringConverter.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,21 @@ +--- cpp.orig/include/Ice/IconvStringConverter.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/IconvStringConverter.h 2012-03-04 20:14:52.000000000 +0100 +@@ -225,10 +225,16 @@ + template /*static*/ void + IconvStringConverter::close(std::pair cdp) + { +- int rs = iconv_close(cdp.first); ++#ifndef NDEBUG ++ int rs = ++#endif ++ iconv_close(cdp.first); + assert(rs == 0); + +- rs = iconv_close(cdp.second); ++#ifndef NDEBUG ++ rs = ++#endif ++ iconv_close(cdp.second); + assert(rs == 0); + } + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-IncomingAsyncF.h files/patch-cpp-include-Ice-IncomingAsyncF.h --- ../ice.orig/files/patch-cpp-include-Ice-IncomingAsyncF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-IncomingAsyncF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/Ice/IncomingAsyncF.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/IncomingAsyncF.h 2012-03-04 20:14:52.000000000 +0100 +@@ -28,12 +28,6 @@ + + class AMD_Object_ice_invoke; + class AMD_Array_Object_ice_invoke; +- +-} +- +-namespace IceInternal +-{ +- + ICE_API IceUtil::Shared* upCast(::Ice::AMD_Object_ice_invoke*); + ICE_API IceUtil::Shared* upCast(::Ice::AMD_Array_Object_ice_invoke*); + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-LocalObjectF.h files/patch-cpp-include-Ice-LocalObjectF.h --- ../ice.orig/files/patch-cpp-include-Ice-LocalObjectF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-LocalObjectF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/Ice/LocalObjectF.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/LocalObjectF.h 2012-03-04 20:14:52.000000000 +0100 +@@ -18,12 +18,6 @@ + { + + class LocalObject; +- +-} +- +-namespace IceInternal +-{ +- + ICE_API IceUtil::Shared* upCast(::Ice::LocalObject*); + + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-ObjectF.h files/patch-cpp-include-Ice-ObjectF.h --- ../ice.orig/files/patch-cpp-include-Ice-ObjectF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-ObjectF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,22 @@ +--- cpp.orig/include/Ice/ObjectF.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/ObjectF.h 2012-03-04 20:14:52.000000000 +0100 +@@ -17,19 +17,8 @@ + { + + class Object; +- +-} +- +-namespace IceInternal +-{ +- + ICE_API IceUtil::Shared* upCast(::Ice::Object*); + +-} +- +-namespace Ice +-{ +- + typedef IceInternal::Handle< Object > ObjectPtr; + + void ICE_API __patch__ObjectPtr(void*, ObjectPtr&); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-OutgoingAsyncF.h files/patch-cpp-include-Ice-OutgoingAsyncF.h --- ../ice.orig/files/patch-cpp-include-Ice-OutgoingAsyncF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-OutgoingAsyncF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/include/Ice/OutgoingAsyncF.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/OutgoingAsyncF.h 2012-03-04 20:14:52.000000000 +0100 +@@ -19,13 +19,13 @@ + + class AsyncResult; + typedef IceInternal::Handle AsyncResultPtr; ++ICE_API IceUtil::Shared* upCast(::Ice::AsyncResult*); + + } + + namespace IceInternal + { + +-ICE_API IceUtil::Shared* upCast(::Ice::AsyncResult*); + + class OutgoingAsync; + ICE_API IceUtil::Shared* upCast(OutgoingAsync*); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-Proxy.h files/patch-cpp-include-Ice-Proxy.h --- ../ice.orig/files/patch-cpp-include-Ice-Proxy.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-Proxy.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,56 @@ +--- cpp.orig/include/Ice/Proxy.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/Proxy.h 2012-03-04 20:14:52.000000000 +0100 +@@ -38,6 +38,8 @@ + + class Locator; + class Router; ++ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Locator*); ++ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Router*); + + } + +@@ -46,8 +48,6 @@ + namespace IceInternal + { + +-ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Locator*); +-ICE_API ::IceProxy::Ice::Object* upCast(::IceProxy::Ice::Router*); + + class LocalExceptionWrapper; + +@@ -1172,7 +1172,7 @@ + + TwowayCallbackNC(const TPtr& instance, bool cb, Exception excb, Sent sentcb) : CallbackNC(instance, excb, sentcb) + { +- checkCallback(instance, cb || excb != 0); ++ this->checkCallback(instance, cb || excb != 0); + } + }; + +@@ -1188,7 +1188,7 @@ + + TwowayCallback(const TPtr& instance, bool cb, Exception excb, Sent sentcb) : Callback(instance, excb, sentcb) + { +- checkCallback(instance, cb || excb != 0); ++ this->checkCallback(instance, cb || excb != 0); + } + }; + +@@ -1209,7 +1209,7 @@ + OnewayCallbackNC(const TPtr& instance, Response cb, Exception excb, Sent sentcb) : + CallbackNC(instance, excb, sentcb), response(cb) + { +- checkCallback(instance, cb != 0 || excb != 0); ++ this->checkCallback(instance, cb != 0 || excb != 0); + } + + virtual void __completed(const ::Ice::AsyncResultPtr& result) const +@@ -1254,7 +1254,7 @@ + OnewayCallback(const TPtr& instance, Response cb, Exception excb, Sent sentcb) : + Callback(instance, excb, sentcb), response(cb) + { +- checkCallback(instance, cb != 0 || excb != 0); ++ this->checkCallback(instance, cb != 0 || excb != 0); + } + + virtual void __completed(const ::Ice::AsyncResultPtr& result) const diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-ProxyF.h files/patch-cpp-include-Ice-ProxyF.h --- ../ice.orig/files/patch-cpp-include-Ice-ProxyF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-ProxyF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,76 @@ +--- cpp.orig/include/Ice/ProxyF.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/ProxyF.h 2012-03-04 20:14:52.000000000 +0100 +@@ -22,6 +22,11 @@ + { + + class Object; ++inline ::IceProxy::Ice::Object* ++upCast(::IceProxy::Ice::Object* o) ++{ ++ return o; ++} + + } + +@@ -34,6 +39,11 @@ + { + + class Object; ++inline ::IceDelegate::Ice::Object* ++upCast(::IceDelegate::Ice::Object* o) ++{ ++ return o; ++} + + } + +@@ -47,6 +57,12 @@ + + class Object; + ++inline ::IceDelegateM::Ice::Object* ++upCast(::IceDelegateM::Ice::Object* o) ++{ ++ return o; ++} ++ + } + + } +@@ -58,36 +74,12 @@ + { + + class Object; +- +-} +- +-} +- +-namespace IceInternal +-{ +- +-inline ::IceProxy::Ice::Object* +-upCast(::IceProxy::Ice::Object* o) +-{ +- return o; +-} +- +-inline ::IceDelegate::Ice::Object* +-upCast(::IceDelegate::Ice::Object* o) +-{ +- return o; +-} +- + inline ::IceDelegateD::Ice::Object* + upCast(::IceDelegateD::Ice::Object* o) + { + return o; + } + +-inline ::IceDelegateM::Ice::Object* +-upCast(::IceDelegateM::Ice::Object* o) +-{ +- return o; + } + + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-Stream.h files/patch-cpp-include-Ice-Stream.h --- ../ice.orig/files/patch-cpp-include-Ice-Stream.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-Stream.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,79 @@ +--- cpp.orig/include/Ice/Stream.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/Stream.h 2012-03-04 20:14:52.000000000 +0100 +@@ -17,6 +17,12 @@ + #include + #include + ++namespace IceInternal ++{ ++ // Forward declaration required for writer specializations. ++ void delegateThrowMarshalException(const char*, int, const ::std::string&); ++} ++ + namespace Ice + { + +@@ -45,9 +51,6 @@ + StreamTraitTypeUnknown + }; + +-// Forward declaration required for writer specializations. +-class MarshalException; +- + // + // Base trait template. This doesn't actually do anything -- we just + // use it as a template that we can specialize. +@@ -542,7 +545,7 @@ + { + if(static_cast(v) < 0 || static_cast(v) >= StreamTrait::enumLimit) + { +- throw MarshalException(__FILE__, __LINE__, "enumerator out of range"); ++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range"); + } + outS->write(static_cast(v)); + } +@@ -558,7 +561,7 @@ + inS->read(val); + if(val > StreamTrait::enumLimit) + { +- throw MarshalException(__FILE__, __LINE__, "enumerator out of range"); ++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range"); + } + v = static_cast(val); + } +@@ -573,7 +576,7 @@ + { + if(static_cast(v) < 0 || static_cast(v) >= StreamTrait::enumLimit) + { +- throw MarshalException(__FILE__, __LINE__, "enumerator out of range"); ++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range"); + } + outS->write(static_cast(v)); + } +@@ -589,7 +592,7 @@ + inS->read(val); + if(val < 0 || val > StreamTrait::enumLimit) + { +- throw MarshalException(__FILE__, __LINE__, "enumerator out of range"); ++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range"); + } + v = static_cast(val); + } +@@ -603,7 +606,7 @@ + { + if(static_cast(v) < 0 || static_cast(v) >= StreamTrait::enumLimit) + { +- throw MarshalException(__FILE__, __LINE__, "enumerator out of range"); ++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range"); + } + outS->write(static_cast(v)); + } +@@ -619,7 +622,7 @@ + inS->read(val); + if(val < 0 || val > StreamTrait::enumLimit) + { +- throw MarshalException(__FILE__, __LINE__, "enumerator out of range"); ++ IceInternal::delegateThrowMarshalException(__FILE__, __LINE__, "enumerator out of range"); + } + v = static_cast(val); + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-Ice-StreamF.h files/patch-cpp-include-Ice-StreamF.h --- ../ice.orig/files/patch-cpp-include-Ice-StreamF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-Ice-StreamF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/Ice/StreamF.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/Ice/StreamF.h 2012-03-04 20:14:52.000000000 +0100 +@@ -19,12 +19,6 @@ + + class InputStream; + class OutputStream; +- +-} +- +-namespace IceInternal +-{ +- + ICE_API IceUtil::Shared* upCast(::Ice::InputStream*); + ICE_API IceUtil::Shared* upCast(::Ice::OutputStream*); + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-include-IceUtil-Mutex.h files/patch-cpp-include-IceUtil-Mutex.h --- ../ice.orig/files/patch-cpp-include-IceUtil-Mutex.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-include-IceUtil-Mutex.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/include/IceUtil/Mutex.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/include/IceUtil/Mutex.h 2012-03-04 20:14:52.000000000 +0100 +@@ -251,8 +251,11 @@ + inline + Mutex::~Mutex() + { ++#ifndef NDEBUG + int rc = 0; +- rc = pthread_mutex_destroy(&_mutex); ++ rc = ++#endif ++ pthread_mutex_destroy(&_mutex); + assert(rc == 0); + } + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Freeze-MapDb.cpp files/patch-cpp-src-Freeze-MapDb.cpp --- ../ice.orig/files/patch-cpp-src-Freeze-MapDb.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Freeze-MapDb.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/Freeze/MapDb.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Freeze/MapDb.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -229,7 +229,11 @@ + #ifndef NDEBUG + bool inserted = + #endif +- _indices.insert(IndexMap::value_type(indexBase->name(), indexI.get())).second; ++ _indices.insert(IndexMap::value_type(indexBase->name(), indexI.get())) ++#ifndef NDEBUG ++ .second ++#endif ++ ; + assert(inserted); + + indexBase->_impl = indexI.release(); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Freeze-MapI.cpp files/patch-cpp-src-Freeze-MapI.cpp --- ../ice.orig/files/patch-cpp-src-Freeze-MapI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Freeze-MapI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,41 @@ +--- cpp.orig/src/Freeze/MapI.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Freeze/MapI.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -749,8 +749,11 @@ + + try + { ++#ifndef NDEBUG + int err; +- err = _dbc->put(&dbKey, &dbValue, DB_CURRENT); ++ err = ++#endif ++ _dbc->put(&dbKey, &dbValue, DB_CURRENT); + assert(err == 0); + } + catch(const ::DbDeadlockException& dx) +@@ -1023,7 +1026,11 @@ + #ifndef NDEBUG + bool inserted = + #endif +- _indices.insert(IndexMap::value_type(indexBase->name(), indexBase)).second; ++ _indices.insert(IndexMap::value_type(indexBase->name(), indexBase)) ++#ifndef NDEBUG ++ .second ++#endif ++ ; + assert(inserted); + indexBase->_map = this; + } +@@ -1360,8 +1367,11 @@ + try + { + u_int32_t count; ++#ifndef NDEBUG + int err; +- err = _db->truncate(txn, &count, txn != 0 ? 0 : DB_AUTO_COMMIT); ++ err = ++#endif ++ _db->truncate(txn, &count, txn != 0 ? 0 : DB_AUTO_COMMIT); + assert(err == 0); + break; + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Freeze-SharedDbEnv.cpp files/patch-cpp-src-Freeze-SharedDbEnv.cpp --- ../ice.orig/files/patch-cpp-src-Freeze-SharedDbEnv.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Freeze-SharedDbEnv.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/Freeze/SharedDbEnv.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Freeze/SharedDbEnv.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -336,8 +336,11 @@ + // Remove from map + // + ++#ifndef NDEBUG + size_t one; +- one = sharedDbEnvMap->erase(key); ++ one = ++#endif ++ sharedDbEnvMap->erase(key); + assert(one == 1); + + if(sharedDbEnvMap->size() == 0) diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.cpp files/patch-cpp-src-Glacier2-Blobject.cpp --- ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-Blobject.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,18 @@ +--- cpp.orig/src/Glacier2/Blobject.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Glacier2/Blobject.cpp 2012-03-04 19:39:27.000000000 +0100 +@@ -171,6 +171,15 @@ + } + + void ++Glacier2::Blobject::destroy() ++{ ++ if(_requestQueue) ++ { ++ _requestQueue->destroy(); ++ } ++} ++ ++void + Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Object_ice_invokePtr& amdCB, + const std::pair& inParams, const Current& current) + { diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.h files/patch-cpp-src-Glacier2-Blobject.h --- ../ice.orig/files/patch-cpp-src-Glacier2-Blobject.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-Blobject.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Glacier2/Blobject.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Glacier2/Blobject.h 2012-03-04 19:39:27.000000000 +0100 +@@ -24,6 +24,8 @@ + Blobject(const InstancePtr&, const Ice::ConnectionPtr&, const Ice::Context&); + virtual ~Blobject(); + ++ void destroy(); ++ + protected: + + void invoke(Ice::ObjectPrx&, const Ice::AMD_Object_ice_invokePtr&, diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.cpp files/patch-cpp-src-Glacier2-RequestQueue.cpp --- ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-RequestQueue.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,74 @@ +--- cpp.orig/src/Glacier2/RequestQueue.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Glacier2/RequestQueue.cpp 2012-03-04 19:39:27.000000000 +0100 +@@ -185,7 +185,8 @@ + _callback(newCallback_Object_ice_invoke(this, &RequestQueue::response, &RequestQueue::exception, + &RequestQueue::sent)), + _flushCallback(newCallback_Connection_flushBatchRequests(this, &RequestQueue::exception, &RequestQueue::sent)), +- _pendingSend(false) ++ _pendingSend(false), ++ _destroyed(false) + { + } + +@@ -241,6 +242,37 @@ + } + + void ++Glacier2::RequestQueue::destroy() ++{ ++ IceUtil::Mutex::Lock lock(*this); ++ ++ _destroyed = true; ++ ++ // ++ // Although the session has been destroyed, we cannot destroy this queue ++ // until all requests have completed. ++ // ++ if(_requests.empty()) ++ { ++ destroyInternal(); ++ } ++} ++ ++void ++Glacier2::RequestQueue::destroyInternal() ++{ ++ // ++ // Must be called with the mutex locked. ++ // ++ ++ // ++ // Remove cyclic references. ++ // ++ const_cast(_callback) = 0; ++ const_cast(_flushCallback) = 0; ++} ++ ++void + Glacier2::RequestQueue::flush() + { + assert(_connection); +@@ -289,6 +321,11 @@ + _pendingSendRequest = 0; + } + } ++ ++ if(_destroyed && _requests.empty()) ++ { ++ destroyInternal(); ++ } + } + + void +@@ -312,6 +349,11 @@ + } + } + _requests.clear(); ++ ++ if(_destroyed) ++ { ++ destroyInternal(); ++ } + } + + void diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.h files/patch-cpp-src-Glacier2-RequestQueue.h --- ../ice.orig/files/patch-cpp-src-Glacier2-RequestQueue.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-RequestQueue.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,23 @@ +--- cpp.orig/src/Glacier2/RequestQueue.h 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Glacier2/RequestQueue.h 2012-03-04 19:39:27.000000000 +0100 +@@ -65,8 +65,12 @@ + bool addRequest(const RequestPtr&); + void flushRequests(std::set&); + ++ void destroy(); ++ + private: + ++ void destroyInternal(); ++ + void flush(); + void flush(std::set&); + +@@ -83,6 +87,7 @@ + std::deque _requests; + bool _pendingSend; + RequestPtr _pendingSendRequest; ++ bool _destroyed; + }; + typedef IceUtil::Handle RequestQueuePtr; + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Glacier2-RouterI.cpp files/patch-cpp-src-Glacier2-RouterI.cpp --- ../ice.orig/files/patch-cpp-src-Glacier2-RouterI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Glacier2-RouterI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/Glacier2/RouterI.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Glacier2/RouterI.cpp 2012-03-04 19:39:27.000000000 +0100 +@@ -98,6 +98,12 @@ + _session->destroy_async(amiCB); + } + } ++ ++ _clientBlobject->destroy(); ++ if(_serverBlobject) ++ { ++ _serverBlobject->destroy(); ++ } + } + + ObjectPrx diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-ConnectionI.cpp files/patch-cpp-src-Ice-ConnectionI.cpp --- ../ice.orig/files/patch-cpp-src-Ice-ConnectionI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-ConnectionI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,27 @@ +--- cpp.orig/src/Ice/ConnectionI.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Ice/ConnectionI.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -31,7 +31,7 @@ + using namespace Ice; + using namespace IceInternal; + +-Ice::LocalObject* IceInternal::upCast(ConnectionI* p) { return p; } ++Ice::LocalObject* Ice::upCast(ConnectionI* p) { return p; } + + namespace + { +@@ -600,6 +600,7 @@ + } + catch(const LocalException& ex) + { ++ status = IceInternal::AsyncStatusQueued; // this is only to apeace the compiler + setState(StateClosed, ex); + assert(_exception.get()); + _exception->ice_throw(); +@@ -971,6 +972,7 @@ + } + catch(const Ice::LocalException& ex) + { ++ status = IceInternal::AsyncStatusQueued; // this is only to apeace the compiler + setState(StateClosed, ex); + assert(_exception.get()); + _exception->ice_throw(); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-IncomingAsync.cpp files/patch-cpp-src-Ice-IncomingAsync.cpp --- ../ice.orig/files/patch-cpp-src-Ice-IncomingAsync.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-IncomingAsync.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/IncomingAsync.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Ice/IncomingAsync.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -24,7 +24,7 @@ + using namespace IceInternal; + + IceUtil::Shared* IceInternal::upCast(IncomingAsync* p) { return p; } +-IceUtil::Shared* IceInternal::upCast(AMD_Object_ice_invoke* p) { return p; } ++IceUtil::Shared* Ice::upCast(AMD_Object_ice_invoke* p) { return p; } + + namespace + { diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-LocalObject.cpp files/patch-cpp-src-Ice-LocalObject.cpp --- ../ice.orig/files/patch-cpp-src-Ice-LocalObject.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-LocalObject.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/LocalObject.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Ice/LocalObject.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -13,7 +13,7 @@ + using namespace Ice; + using namespace IceInternal; + +-IceUtil::Shared* IceInternal::upCast(LocalObject* obj) { return obj; } ++IceUtil::Shared* Ice::upCast(LocalObject* obj) { return obj; } + + bool + Ice::LocalObject::operator==(const LocalObject& r) const diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-Object.cpp files/patch-cpp-src-Ice-Object.cpp --- ../ice.orig/files/patch-cpp-src-Ice-Object.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-Object.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/Object.cpp 2011-06-15 21:43:58.000000000 +0200 ++++ cpp/src/Ice/Object.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -19,7 +19,7 @@ + using namespace Ice; + using namespace IceInternal; + +-IceUtil::Shared* IceInternal::upCast(Object* p) { return p; } ++IceUtil::Shared* Ice::upCast(Object* p) { return p; } + + bool + Ice::Object::operator==(const Object& r) const diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-OutgoingAsync.cpp files/patch-cpp-src-Ice-OutgoingAsync.cpp --- ../ice.orig/files/patch-cpp-src-Ice-OutgoingAsync.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-OutgoingAsync.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/OutgoingAsync.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Ice/OutgoingAsync.cpp 2012-03-04 20:14:52.000000000 +0100 +@@ -30,7 +30,7 @@ + using namespace Ice; + using namespace IceInternal; + +-IceUtil::Shared* IceInternal::upCast(AsyncResult* p) { return p; } ++IceUtil::Shared* Ice::upCast(AsyncResult* p) { return p; } + + IceUtil::Shared* IceInternal::upCast(OutgoingAsyncMessageCallback* p) { return p; } + IceUtil::Shared* IceInternal::upCast(OutgoingAsync* p) { return p; } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.cpp files/patch-cpp-src-Ice-PropertyNames.cpp --- ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-PropertyNames.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/Ice/PropertyNames.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Ice/PropertyNames.cpp 2012-03-04 19:55:44.000000000 +0100 +@@ -8,7 +8,7 @@ + // ********************************************************************** + + // +-// Generated by makeprops.py from file ..\config\PropertyNames.xml, Mon May 09 07:39:43 2011 ++// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Jul 12 07:22:34 2011 + + // IMPORTANT: Do not edit this file -- any edits made here will be lost! + +@@ -335,6 +335,8 @@ + IceInternal::Property("IceGrid.Registry.PermissionsVerifier", false, 0), + IceInternal::Property("IceGrid.Registry.ReplicaName", false, 0), + IceInternal::Property("IceGrid.Registry.ReplicaSessionTimeout", false, 0), ++ IceInternal::Property("IceGrid.Registry.RequireNodeCertCN", false, 0), ++ IceInternal::Property("IceGrid.Registry.RequireReplicaCertCN", false, 0), + IceInternal::Property("IceGrid.Registry.Server.ACM", false, 0), + IceInternal::Property("IceGrid.Registry.Server.AdapterId", false, 0), + IceInternal::Property("IceGrid.Registry.Server.Endpoints", false, 0), diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.h files/patch-cpp-src-Ice-PropertyNames.h --- ../ice.orig/files/patch-cpp-src-Ice-PropertyNames.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-PropertyNames.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/Ice/PropertyNames.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Ice/PropertyNames.h 2012-03-04 19:55:44.000000000 +0100 +@@ -8,7 +8,7 @@ + // ********************************************************************** + + // +-// Generated by makeprops.py from file ..\config\PropertyNames.xml, Mon May 09 07:39:43 2011 ++// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Jul 12 07:22:34 2011 + + // IMPORTANT: Do not edit this file -- any edits made here will be lost! + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-ProxyFactory.cpp files/patch-cpp-src-Ice-ProxyFactory.cpp --- ../ice.orig/files/patch-cpp-src-Ice-ProxyFactory.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-ProxyFactory.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,10 @@ +--- cpp.orig/src/Ice/ProxyFactory.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Ice/ProxyFactory.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -229,6 +229,7 @@ + } + else if(cnt > static_cast(_retryIntervals.size())) + { ++ interval = 0; // apeace compiler + if(traceLevels->retry >= 1) + { + Trace out(logger, traceLevels->retryCat); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-Service.cpp files/patch-cpp-src-Ice-Service.cpp --- ../ice.orig/files/patch-cpp-src-Ice-Service.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-Service.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,32 @@ +--- cpp.orig/src/Ice/Service.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Ice/Service.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -2136,17 +2136,26 @@ + // + // Associate stdin, stdout and stderr with /dev/null. + // ++#ifndef NDEBUG + int fd; +- fd = open("/dev/null", O_RDWR); ++ fd = ++#endif ++ open("/dev/null", O_RDWR); + assert(fd == 0); + if(stdOut.empty()) + { +- fd = dup2(0, 1); ++#ifndef NDEBUG ++ fd = ++#endif ++ dup2(0, 1); + assert(fd == 1); + } + if(stdErr.empty()) + { +- fd = dup2(1, 2); ++#ifndef NDEBUG ++ fd = ++#endif ++ dup2(1, 2); + assert(fd == 2); + } + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Ice-Stream.cpp files/patch-cpp-src-Ice-Stream.cpp --- ../ice.orig/files/patch-cpp-src-Ice-Stream.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Ice-Stream.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,24 @@ +--- cpp.orig/src/Ice/Stream.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Ice/Stream.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -8,10 +8,19 @@ + // ********************************************************************** + + #include ++#include + + using namespace std; + using namespace Ice; + using namespace IceInternal; + +-IceUtil::Shared* IceInternal::upCast(InputStream* p) { return p; } +-IceUtil::Shared* IceInternal::upCast(OutputStream* p) { return p; } ++IceUtil::Shared* Ice::upCast(InputStream* p) { return p; } ++IceUtil::Shared* Ice::upCast(OutputStream* p) { return p; } ++ ++namespace IceInternal ++{ ++ void delegateThrowMarshalException(const char* file, int line , const ::std::string& message) ++ { ++ throw Ice::MarshalException(file, line, message); ++ } ++} diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-AdminCallbackRouter.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,16 @@ +--- cpp.orig/src/IceGrid/AdminCallbackRouter.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/AdminCallbackRouter.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -49,7 +49,12 @@ + #ifndef NDEBUG + bool inserted = + #endif +- _categoryToConnection.insert(map::value_type(category, con)).second; ++ _categoryToConnection.insert(map::value_type(category, con)) ++#ifndef NDEBUG ++ .second ++#endif ++ ; ++ + + assert(inserted == true); + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-DescriptorHelper.cpp files/patch-cpp-src-IceGrid-DescriptorHelper.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-DescriptorHelper.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-DescriptorHelper.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,35 @@ +--- cpp.orig/src/IceGrid/DescriptorHelper.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/DescriptorHelper.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -198,15 +198,6 @@ + return result; + } + +-template Dict +-getDictUpdatedElts(const Dict& ldict, const Dict& rdict) +-{ +-#if defined(_MSC_VER) && (_MSC_VER < 1300) +- return getDictUpdatedEltsWithEq(ldict, rdict, equal_to()); +-#else +- return getDictUpdatedEltsWithEq(ldict, rdict, equal_to()); +-#endif +-} + + template Dict + getDictUpdatedEltsWithEq(const Dict& ldict, const Dict& rdict, EqFunc eq) +@@ -223,6 +214,16 @@ + return result; + } + ++template Dict ++getDictUpdatedElts(const Dict& ldict, const Dict& rdict) ++{ ++#if defined(_MSC_VER) && (_MSC_VER < 1300) ++ return getDictUpdatedEltsWithEq(ldict, rdict, equal_to()); ++#else ++ return getDictUpdatedEltsWithEq(ldict, rdict, equal_to()); ++#endif ++} ++ + template Ice::StringSeq + getDictRemovedElts(const Dict& ldict, const Dict& rdict) + { diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-Internal.ice files/patch-cpp-src-IceGrid-Internal.ice --- ../ice.orig/files/patch-cpp-src-IceGrid-Internal.ice 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-Internal.ice 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/IceGrid/Internal.ice 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/Internal.ice 2012-03-04 19:55:44.000000000 +0100 +@@ -702,7 +702,7 @@ + * + **/ + NodeSession* registerNode(InternalNodeInfo info, Node* prx, LoadInfo loadInf) +- throws NodeActiveException; ++ throws NodeActiveException, PermissionDeniedException; + + /** + * +@@ -721,7 +721,7 @@ + * + **/ + ReplicaSession* registerReplica(InternalReplicaInfo info, InternalRegistry* prx) +- throws ReplicaActiveException; ++ throws ReplicaActiveException, PermissionDeniedException; + + /** + * diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.cpp files/patch-cpp-src-IceGrid-InternalRegistryI.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-InternalRegistryI.cpp 2012-03-04 22:13:12.000000000 +0100 @@ -0,0 +1,136 @@ +--- cpp.orig/src/IceGrid/InternalRegistryI.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/InternalRegistryI.cpp 2012-03-04 19:55:44.000000000 +0100 +@@ -19,6 +19,8 @@ + #include + #include + #include ++#include ++#include + + using namespace std; + using namespace IceGrid; +@@ -38,6 +40,8 @@ + Ice::PropertiesPtr properties = database->getCommunicator()->getProperties(); + _nodeSessionTimeout = properties->getPropertyAsIntWithDefault("IceGrid.Registry.NodeSessionTimeout", 30); + _replicaSessionTimeout = properties->getPropertyAsIntWithDefault("IceGrid.Registry.ReplicaSessionTimeout", 30); ++ _requireNodeCertCN = properties->getPropertyAsIntWithDefault("IceGrid.Registry.RequireNodeCertCN", 0); ++ _requireReplicaCertCN = properties->getPropertyAsIntWithDefault("IceGrid.Registry.RequireReplicaCertCN", 0); + } + + InternalRegistryI::~InternalRegistryI() +@@ -50,7 +54,56 @@ + const LoadInfo& load, + const Ice::Current& current) + { +- const Ice::LoggerPtr logger = _database->getTraceLevels()->logger; ++ const TraceLevelsPtr traceLevels = _database->getTraceLevels(); ++ const Ice::LoggerPtr logger = traceLevels->logger; ++ if(!info || !node) ++ { ++ return 0; ++ } ++ ++ if(_requireNodeCertCN) ++ { ++ try ++ { ++ IceSSL::ConnectionInfoPtr sslConnInfo = IceSSL::ConnectionInfoPtr::dynamicCast(current.con->getInfo()); ++ if(sslConnInfo) ++ { ++ if (sslConnInfo->certs.empty() || ++ !IceSSL::Certificate::decode(sslConnInfo->certs[0])->getSubjectDN().match("CN=" + info->name)) ++ { ++ if(traceLevels->node > 0) ++ { ++ Ice::Trace out(logger, traceLevels->nodeCat); ++ out << "certificate CN doesn't match node name `" << info->name << "'"; ++ } ++ throw PermissionDeniedException("certificate CN doesn't match node name `" + info->name + "'"); ++ } ++ } ++ else ++ { ++ if(traceLevels->node > 0) ++ { ++ Ice::Trace out(logger, traceLevels->nodeCat); ++ out << "node certificate for `" << info->name << "' is required to connect to this registry"; ++ } ++ throw PermissionDeniedException("node certificate is required to connect to this registry"); ++ } ++ } ++ catch(const PermissionDeniedException& ex) ++ { ++ throw ex; ++ } ++ catch(const IceUtil::Exception&) ++ { ++ if(traceLevels->node > 0) ++ { ++ Ice::Trace out(logger, traceLevels->nodeCat); ++ out << "unexpected exception while verifying certificate for node `" << info->name << "'"; ++ } ++ throw PermissionDeniedException("unable to verify certificate for node `" + info->name + "'"); ++ } ++ } ++ + try + { + NodeSessionIPtr session = new NodeSessionI(_database, node, info, _nodeSessionTimeout, load); +@@ -68,7 +121,56 @@ + const InternalRegistryPrx& prx, + const Ice::Current& current) + { +- const Ice::LoggerPtr logger = _database->getTraceLevels()->logger; ++ const TraceLevelsPtr traceLevels = _database->getTraceLevels(); ++ const Ice::LoggerPtr logger = traceLevels->logger; ++ if(!info || !prx) ++ { ++ return 0; ++ } ++ ++ if(_requireReplicaCertCN) ++ { ++ try ++ { ++ IceSSL::ConnectionInfoPtr sslConnInfo = IceSSL::ConnectionInfoPtr::dynamicCast(current.con->getInfo()); ++ if(sslConnInfo) ++ { ++ if (sslConnInfo->certs.empty() || ++ !IceSSL::Certificate::decode(sslConnInfo->certs[0])->getSubjectDN().match("CN=" + info->name)) ++ { ++ if(traceLevels->replica > 0) ++ { ++ Ice::Trace out(logger, traceLevels->replicaCat); ++ out << "certificate CN doesn't match replica name `" << info->name << "'"; ++ } ++ throw PermissionDeniedException("certificate CN doesn't match replica name `" + info->name + "'"); ++ } ++ } ++ else ++ { ++ if(traceLevels->replica > 0) ++ { ++ Ice::Trace out(logger, traceLevels->replicaCat); ++ out << "replica certificate for `" << info->name << "' is required to connect to this registry"; ++ } ++ throw PermissionDeniedException("replica certificate is required to connect to this registry"); ++ } ++ } ++ catch(const PermissionDeniedException& ex) ++ { ++ throw ex; ++ } ++ catch(const IceUtil::Exception&) ++ { ++ if(traceLevels->replica > 0) ++ { ++ Ice::Trace out(logger, traceLevels->replicaCat); ++ out << "unexpected exception while verifying certificate for replica `" << info->name << "'"; ++ } ++ throw PermissionDeniedException("unable to verify certificate for replica `" + info->name + "'"); ++ } ++ } ++ + try + { + ReplicaSessionIPtr s = new ReplicaSessionI(_database, _wellKnownObjects, info, prx, _replicaSessionTimeout); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.h files/patch-cpp-src-IceGrid-InternalRegistryI.h --- ../ice.orig/files/patch-cpp-src-IceGrid-InternalRegistryI.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-InternalRegistryI.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceGrid/InternalRegistryI.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/InternalRegistryI.h 2012-03-04 19:55:44.000000000 +0100 +@@ -68,6 +68,8 @@ + ReplicaSessionManager& _session; + int _nodeSessionTimeout; + int _replicaSessionTimeout; ++ bool _requireNodeCertCN; ++ bool _requireReplicaCertCN; + }; + + }; diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-NodeSessionManager.cpp files/patch-cpp-src-IceGrid-NodeSessionManager.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-NodeSessionManager.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-NodeSessionManager.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceGrid/NodeSessionManager.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/NodeSessionManager.cpp 2012-03-04 19:55:44.000000000 +0100 +@@ -110,6 +110,14 @@ + } + exception.reset(ex.ice_clone()); + } ++ catch(const PermissionDeniedException& ex) ++ { ++ if(traceLevels) ++ { ++ traceLevels->logger->error("connection to the the registry `" + _name + "' was denied:\n" + ex.reason); ++ } ++ exception.reset(ex.ice_clone()); ++ } + catch(const Ice::Exception& ex) + { + exception.reset(ex.ice_clone()); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaCache.cpp files/patch-cpp-src-IceGrid-ReplicaCache.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaCache.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-ReplicaCache.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceGrid/ReplicaCache.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/ReplicaCache.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -40,7 +40,7 @@ + Lock sync(*this); + + ReplicaEntryPtr entry; +- while(entry = getImpl(name)) ++ while((entry = getImpl(name))) + { + ReplicaSessionIPtr session = entry->getSession(); + if(session->isDestroyed()) diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp --- ../ice.orig/files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-ReplicaSessionManager.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceGrid/ReplicaSessionManager.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/ReplicaSessionManager.cpp 2012-03-04 19:55:44.000000000 +0100 +@@ -500,6 +500,14 @@ + } + exception.reset(ex.ice_clone()); + } ++ catch(const PermissionDeniedException& ex) ++ { ++ if(_traceLevels) ++ { ++ _traceLevels->logger->error("connection to the the registry `" + _name + "' was denied:\n" + ex.reason); ++ } ++ exception.reset(ex.ice_clone()); ++ } + catch(const Ice::Exception& ex) + { + exception.reset(ex.ice_clone()); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceGrid-SessionI.h files/patch-cpp-src-IceGrid-SessionI.h --- ../ice.orig/files/patch-cpp-src-IceGrid-SessionI.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceGrid-SessionI.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceGrid/SessionI.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceGrid/SessionI.h 2012-03-04 20:14:53.000000000 +0100 +@@ -35,7 +35,7 @@ + class SessionI; + typedef IceUtil::Handle SessionIPtr; + +-class BaseSessionI : virtual Ice::Object, public IceUtil::Mutex ++class BaseSessionI : virtual public Ice::Object, public IceUtil::Mutex + { + public: + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-Instance.cpp files/patch-cpp-src-IceSSL-Instance.cpp --- ../ice.orig/files/patch-cpp-src-IceSSL-Instance.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-Instance.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceSSL/Instance.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceSSL/Instance.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -38,7 +38,7 @@ + using namespace Ice; + using namespace IceSSL; + +-IceUtil::Shared* IceInternal::upCast(IceSSL::Instance* p) { return p; } ++IceUtil::Shared* IceSSL::upCast(IceSSL::Instance* p) { return p; } + + namespace + { diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-InstanceF.h files/patch-cpp-src-IceSSL-InstanceF.h --- ../ice.orig/files/patch-cpp-src-IceSSL-InstanceF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-InstanceF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceSSL/InstanceF.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceSSL/InstanceF.h 2012-03-04 20:14:53.000000000 +0100 +@@ -18,13 +18,13 @@ + { + + class Instance; ++IceUtil::Shared* upCast(IceSSL::Instance*); + + } + + namespace IceInternal + { + +-IceUtil::Shared* upCast(IceSSL::Instance*); + + } + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-TrustManager.cpp files/patch-cpp-src-IceSSL-TrustManager.cpp --- ../ice.orig/files/patch-cpp-src-IceSSL-TrustManager.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-TrustManager.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceSSL/TrustManager.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceSSL/TrustManager.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -20,7 +20,7 @@ + using namespace std; + using namespace IceSSL; + +-IceUtil::Shared* IceInternal::upCast(IceSSL::TrustManager* p) { return p; } ++IceUtil::Shared* IceSSL::upCast(IceSSL::TrustManager* p) { return p; } + + TrustManager::TrustManager(const Ice::CommunicatorPtr& communicator) : + _communicator(communicator) diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-TrustManagerF.h files/patch-cpp-src-IceSSL-TrustManagerF.h --- ../ice.orig/files/patch-cpp-src-IceSSL-TrustManagerF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-TrustManagerF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceSSL/TrustManagerF.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceSSL/TrustManagerF.h 2012-03-04 20:14:53.000000000 +0100 +@@ -18,13 +18,13 @@ + { + + class TrustManager; ++IceUtil::Shared* upCast(IceSSL::TrustManager*); + + } + + namespace IceInternal + { + +-IceUtil::Shared* upCast(IceSSL::TrustManager*); + + } + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-Util.cpp files/patch-cpp-src-IceSSL-Util.cpp --- ../ice.orig/files/patch-cpp-src-IceSSL-Util.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-Util.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/src/IceSSL/Util.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceSSL/Util.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -175,7 +175,7 @@ + return dh; + } + +-IceUtil::Shared* IceInternal::upCast(IceSSL::DHParams* p) { return p; } ++IceUtil::Shared* IceSSL::upCast(IceSSL::DHParams* p) { return p; } + + IceSSL::DHParams::DHParams() : + _dh512(0), _dh1024(0), _dh2048(0), _dh4096(0) diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceSSL-UtilF.h files/patch-cpp-src-IceSSL-UtilF.h --- ../ice.orig/files/patch-cpp-src-IceSSL-UtilF.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceSSL-UtilF.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,17 @@ +--- cpp.orig/src/IceSSL/UtilF.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceSSL/UtilF.h 2012-03-04 20:14:53.000000000 +0100 +@@ -21,13 +21,13 @@ + { + + class DHParams; ++IceUtil::Shared* upCast(IceSSL::DHParams*); + + } + + namespace IceInternal + { + +-IceUtil::Shared* upCast(IceSSL::DHParams*); + + } + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceStorm-NodeI.cpp files/patch-cpp-src-IceStorm-NodeI.cpp --- ../ice.orig/files/patch-cpp-src-IceStorm-NodeI.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceStorm-NodeI.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,14 @@ +--- cpp.orig/src/IceStorm/NodeI.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceStorm/NodeI.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -18,11 +18,6 @@ + namespace + { + +-bool operator==(const GroupNodeInfo& info, int id) +-{ +- return info.id == id; +-} +- + class CheckTask : public IceUtil::TimerTask + { + const NodeIPtr _node; diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-Cond.cpp files/patch-cpp-src-IceUtil-Cond.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-Cond.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-Cond.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,15 @@ +--- cpp.orig/src/IceUtil/Cond.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceUtil/Cond.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -330,8 +330,11 @@ + + IceUtil::Cond::~Cond() + { ++#ifndef NDEBUG + int rc = 0; +- rc = pthread_cond_destroy(&_cond); ++ rc = ++#endif ++ pthread_cond_destroy(&_cond); + assert(rc == 0); + } + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-CountDownLatch.cpp files/patch-cpp-src-IceUtil-CountDownLatch.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-CountDownLatch.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-CountDownLatch.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,21 @@ +--- cpp.orig/src/IceUtil/CountDownLatch.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceUtil/CountDownLatch.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -44,10 +44,16 @@ + #ifdef _WIN32 + CloseHandle(_event); + #else ++#ifndef NDEBUG + int rc = 0; +- rc = pthread_mutex_destroy(&_mutex); ++ rc = ++#endif ++ pthread_mutex_destroy(&_mutex); + assert(rc == 0); +- rc = pthread_cond_destroy(&_cond); ++#ifndef NDEBUG ++ rc = ++#endif ++ pthread_cond_destroy(&_cond); + assert(rc == 0); + #endif + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-CtrlCHandler.cpp files/patch-cpp-src-IceUtil-CtrlCHandler.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-CtrlCHandler.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-CtrlCHandler.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,49 @@ +--- cpp.orig/src/IceUtil/CtrlCHandler.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceUtil/CtrlCHandler.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -219,29 +219,41 @@ + sigaddset(&ctrlCLikeSignals, SIGHUP); + sigaddset(&ctrlCLikeSignals, SIGINT); + sigaddset(&ctrlCLikeSignals, SIGTERM); +- int rc = pthread_sigmask(SIG_BLOCK, &ctrlCLikeSignals, 0); ++#ifndef NDEBUG ++ int rc = ++#endif ++ pthread_sigmask(SIG_BLOCK, &ctrlCLikeSignals, 0); + assert(rc == 0); + + // Joinable thread +- rc = pthread_create(&_tid, 0, sigwaitThread, 0); ++#ifndef NDEBUG ++ rc = ++#endif ++ pthread_create(&_tid, 0, sigwaitThread, 0); + assert(rc == 0); + } + } + + CtrlCHandler::~CtrlCHandler() + { +- int rc = pthread_cancel(_tid); ++#ifndef NDEBUG ++ int rc = ++#endif ++ pthread_cancel(_tid); + assert(rc == 0); + #if defined(__APPLE__) + // + // WORKAROUND: sigwait isn't a cancellation point on MacOS X, see + // comment in sigwaitThread + // +- rc = pthread_kill(_tid, SIGTERM); ++ pthread_kill(_tid, SIGTERM); + //assert(rc == 0); For some reaosns, this assert is sometime triggered + #endif + void* status = 0; +- rc = pthread_join(_tid, &status); ++#ifndef NDEBUG ++ rc = ++#endif ++ pthread_join(_tid, &status); + assert(rc == 0); + #if !defined(__APPLE__) + assert(status == PTHREAD_CANCELED); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-FileUtil.cpp files/patch-cpp-src-IceUtil-FileUtil.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-FileUtil.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-FileUtil.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/src/IceUtil/FileUtil.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceUtil/FileUtil.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -26,6 +26,10 @@ + # include + #endif + ++#ifdef __FreeBSD__ ++# include ++#endif ++ + using namespace std; + + // diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-IceUtil-RecMutex.cpp files/patch-cpp-src-IceUtil-RecMutex.cpp --- ../ice.orig/files/patch-cpp-src-IceUtil-RecMutex.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-IceUtil-RecMutex.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,28 @@ +--- cpp.orig/src/IceUtil/RecMutex.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/IceUtil/RecMutex.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -148,8 +148,11 @@ + IceUtil::RecMutex::~RecMutex() + { + assert(_count == 0); ++#ifndef NDEBUG + int rc = 0; +- rc = pthread_mutex_destroy(&_mutex); ++ rc = ++#endif ++ pthread_mutex_destroy(&_mutex); + assert(rc == 0); + } + +@@ -196,8 +199,11 @@ + { + if(--_count == 0) + { ++#ifndef NDEBUG + int rc = 0; // Prevent warnings when NDEBUG is defined. +- rc = pthread_mutex_unlock(&_mutex); ++ rc = ++#endif ++ pthread_mutex_unlock(&_mutex); + assert(rc == 0); + } + } diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Slice-CPlusPlusUtil.cpp files/patch-cpp-src-Slice-CPlusPlusUtil.cpp --- ../ice.orig/files/patch-cpp-src-Slice-CPlusPlusUtil.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Slice-CPlusPlusUtil.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/Slice/CPlusPlusUtil.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Slice/CPlusPlusUtil.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -631,7 +631,7 @@ + string scope = fixKwd(cl->scope()); + if(marshal) + { +- out << nl << stream << deref << "write(::Ice::ObjectPtr(::IceInternal::upCast(" << fixedParam ++ out << nl << stream << deref << "write(::Ice::ObjectPtr(" << scope << "upCast(" << fixedParam + << ".get())));"; + } + else +@@ -649,7 +649,7 @@ + string scope = fixKwd(px->_class()->scope()); + if(marshal) + { +- out << nl << stream << deref << "write(::Ice::ObjectPrx(::IceInternal::upCast(" << fixedParam ++ out << nl << stream << deref << "write(::Ice::ObjectPrx(::IceProxy" << scope << "upCast(" << fixedParam + << ".get())));"; + } + else diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-Slice-FileTracker.cpp files/patch-cpp-src-Slice-FileTracker.cpp --- ../ice.orig/files/patch-cpp-src-Slice-FileTracker.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-Slice-FileTracker.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/src/Slice/FileTracker.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/Slice/FileTracker.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -17,6 +17,10 @@ + # include + #endif + ++#ifdef __FreeBSD__ ++# include ++#endif ++ + using namespace std; + + Slice::FileException::FileException(const char* file, int line, const string& r) : diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-slice2cpp-Gen.cpp files/patch-cpp-src-slice2cpp-Gen.cpp --- ../ice.orig/files/patch-cpp-src-slice2cpp-Gen.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-slice2cpp-Gen.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,111 @@ +--- cpp.orig/src/slice2cpp/Gen.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/slice2cpp/Gen.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -1944,8 +1944,10 @@ + } + + string name = fixKwd(p->name()); ++ string scoped = fixKwd(p->scoped()); + + H << sp << nl << "class " << name << ';'; ++ H << nl << _dllExport << "::IceProxy::Ice::Object* upCast(::IceProxy" << scoped << "*);"; + } + + Slice::Gen::ProxyVisitor::ProxyVisitor(Output& h, Output& c, const string& dllExport) : +@@ -3691,10 +3693,22 @@ + Slice::Gen::ObjectDeclVisitor::visitClassDecl(const ClassDeclPtr& p) + { + string name = fixKwd(p->name()); ++ string scoped = fixKwd(p->scoped()); + + H << sp << nl << "class " << name << ';'; + H << nl << "bool operator==(const " << name << "&, const " << name << "&);"; + H << nl << "bool operator<(const " << name << "&, const " << name << "&);"; ++ ++ H << sp; ++ ++ if(!p->isLocal()) ++ { ++ H << nl << _dllExport << "::Ice::Object* upCast(" << scoped << "*);"; ++ } ++ else ++ { ++ H << nl << _dllExport << "::Ice::LocalObject* upCast(" << scoped << "*);"; ++ } + } + + void +@@ -4922,13 +4936,13 @@ + { + if((BuiltinPtr::dynamicCast(p) && BuiltinPtr::dynamicCast(p)->kind() == Builtin::KindObject) + || ClassDeclPtr::dynamicCast(p)) +- { +- C << nl << "if(" << prefix << name << ')'; ++ { C << nl << "if(" << prefix << name << ')'; + C << sb; + ClassDeclPtr decl = ClassDeclPtr::dynamicCast(p); + if(decl) + { +- C << nl << "::IceInternal::upCast(" << prefix << name << ".get())->__addObject(_c);"; ++ string scope = fixKwd(decl->scope()); ++ C << nl << scope << "upCast(" << prefix << name << ".get())->__addObject(_c);"; + } + else + { +@@ -4991,9 +5005,10 @@ + ClassDeclPtr decl = ClassDeclPtr::dynamicCast(p); + if(decl) + { +- C << nl << "if(" << "::IceInternal::upCast(" << prefix << name << ".get())->__usesClasses())"; ++ string scope = fixKwd(decl->scope()); ++ C << nl << "if(" << scope << "upCast(" << prefix << name << ".get())->__usesClasses())"; + C << sb; +- C << nl << "::IceInternal::upCast(" << prefix << name << ".get())->__decRefUnsafe();"; ++ C << nl << scope << "upCast(" << prefix << name << ".get())->__decRefUnsafe();"; + C << nl << prefix << name << ".__clearHandleUnsafe();"; + + } +@@ -5629,40 +5644,30 @@ + { + string scoped = fixKwd(p->scoped()); + +- H << sp; +- +- if(!p->isLocal()) +- { +- H << nl << _dllExport << "::Ice::Object* upCast(" << scoped << "*);"; +- H << nl << _dllExport << "::IceProxy::Ice::Object* upCast(::IceProxy" << scoped << "*);"; +- } +- else +- { +- H << nl << _dllExport << "::Ice::LocalObject* upCast(" << scoped << "*);"; +- } + } + + bool + Slice::Gen::IceInternalVisitor::visitClassDefStart(const ClassDefPtr& p) + { + string scoped = fixKwd(p->scoped()); ++ string scope = fixKwd(p->scope()); + + C << sp; + if(!p->isLocal()) + { + C << nl + << (_dllExport.empty() ? "" : "ICE_DECLSPEC_EXPORT ") +- << "::Ice::Object* IceInternal::upCast(" << scoped << "* p) { return p; }"; ++ << "::Ice::Object* " << scope << "upCast(" << scoped << "* p) { return p; }"; + C << nl + << (_dllExport.empty() ? "" : "ICE_DECLSPEC_EXPORT ") +- << "::IceProxy::Ice::Object* IceInternal::upCast(::IceProxy" << scoped ++ << "::IceProxy::Ice::Object* IceProxy" << scope << "upCast(::IceProxy" << scoped + << "* p) { return p; }"; + } + else + { + C << nl + << (_dllExport.empty() ? "" : "ICE_DECLSPEC_EXPORT ") +- << "::Ice::LocalObject* IceInternal::upCast(" << scoped << "* p) { return p; }"; ++ << "::Ice::LocalObject* " << scope << "upCast(" << scoped << "* p) { return p; }"; + } + + return true; diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-slice2cs-Gen.cpp files/patch-cpp-src-slice2cs-Gen.cpp --- ../ice.orig/files/patch-cpp-src-slice2cs-Gen.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-slice2cs-Gen.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,28 @@ +--- cpp.orig/src/slice2cs/Gen.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/slice2cs/Gen.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -1281,7 +1281,7 @@ + { + _out << value << "F"; + } +- else if(ep = EnumPtr::dynamicCast(type)) ++ else if((ep = EnumPtr::dynamicCast(type))) + { + string enumName = fixId(ep->scoped()); + string::size_type colon = value.rfind(':'); +@@ -3914,16 +3914,6 @@ + ClassDefPtr cl = ClassDefPtr::dynamicCast(p->container()); + string name = fixId(p->name(), DotNet::ICloneable, true); + vector params = getParams(p); +- bool hasOutParams = false; +- ParamDeclList paramList = p->parameters(); +- for(ParamDeclList::const_iterator pli = paramList.begin(); pli != paramList.end(); ++pli) +- { +- if((*pli)->isOutParam()) +- { +- hasOutParams = true; +- break; +- } +- } + + _out << sp; + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-src-slice2java-Gen.cpp files/patch-cpp-src-slice2java-Gen.cpp --- ../ice.orig/files/patch-cpp-src-slice2java-Gen.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-src-slice2java-Gen.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/src/slice2java/Gen.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/src/slice2java/Gen.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -1246,7 +1246,7 @@ + { + BuiltinPtr bp; + EnumPtr ep; +- if(bp = BuiltinPtr::dynamicCast(type)) ++ if((bp = BuiltinPtr::dynamicCast(type))) + { + switch(bp->kind()) + { +@@ -1349,7 +1349,7 @@ + } + + } +- else if(ep = EnumPtr::dynamicCast(type)) ++ else if((ep = EnumPtr::dynamicCast(type))) + { + string val = value; + string::size_type pos = val.rfind(':'); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Glacier2-ssl-Server.cpp files/patch-cpp-test-Glacier2-ssl-Server.cpp --- ../ice.orig/files/patch-cpp-test-Glacier2-ssl-Server.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Glacier2-ssl-Server.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,43 @@ +--- cpp.orig/test/Glacier2/ssl/Server.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/Glacier2/ssl/Server.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -31,9 +31,15 @@ + test(ctx["_con.type"] == "ssl"); + test(ctx["_con.localPort"] == "12348"); + } +- test(ctx["_con.localAddress"] == "127.0.0.1"); ++ if (!inFreeBSDJail()) ++ { ++ test(ctx["_con.localAddress"] == "127.0.0.1"); ++ } + test(ctx["_con.remotePort"] != ""); +- test(ctx["_con.remoteAddress"] == "127.0.0.1"); ++ if (!inFreeBSDJail()) ++ { ++ test(ctx["_con.remoteAddress"] == "127.0.0.1"); ++ } + } + + } +@@ -99,7 +105,7 @@ + } + + virtual void +- ice_ping(const Ice::Current& current) ++ ice_ping(const Ice::Current& current) const + { + testContext(_ssl, current.ctx); + } +@@ -133,8 +139,11 @@ + { + testContext(true, current.ctx); + +- test(info.remoteHost == "127.0.0.1"); +- test(info.localHost == "127.0.0.1"); ++ if (!inFreeBSDJail()) ++ { ++ test(info.remoteHost == "127.0.0.1"); ++ test(info.localHost == "127.0.0.1"); ++ } + test(info.localPort == 12348); + + try diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-background-EndpointI.h files/patch-cpp-test-Ice-background-EndpointI.h --- ../ice.orig/files/patch-cpp-test-Ice-background-EndpointI.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-background-EndpointI.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,11 @@ +--- cpp.orig/test/Ice/background/EndpointI.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/Ice/background/EndpointI.h 2012-03-04 20:14:53.000000000 +0100 +@@ -48,7 +48,7 @@ + + virtual Ice::Int hashInit() const; + #if !defined(_MSC_VER) || _MSC_VER > 1300 +- using IceInternal::EndpointI::connectors; ++ using ::IceInternal::EndpointI::connectors; + #endif + + private: diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-custom-AllTests.cpp files/patch-cpp-test-Ice-custom-AllTests.cpp --- ../ice.orig/files/patch-cpp-test-Ice-custom-AllTests.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-custom-AllTests.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,32 @@ +--- cpp.orig/test/Ice/custom/AllTests.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/Ice/custom/AllTests.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -1384,7 +1384,8 @@ + const ::Test::ClassStructSeq& seq, + const InParamPtr& cookie) + { +- pair< ::Test::ClassStructPtr, ::Test::ClassStructSeq> in = getIn(in, cookie); ++ pair< ::Test::ClassStructPtr, ::Test::ClassStructSeq> in; ++ in = getIn(in, cookie); + test(ret == in.first); + test(cs1 == in.first); + test(seq == in.second); +@@ -1432,7 +1433,8 @@ + + void throwExcept1(const Ice::AsyncResultPtr& result) + { +- wstring in = getIn(in, InParamPtr::dynamicCast(result->getCookie())); ++ wstring in; ++ in = getIn(in, InParamPtr::dynamicCast(result->getCookie())); + try + { + Test1::WstringClassPrx t = Test1::WstringClassPrx::uncheckedCast(result->getProxy()); +@@ -1451,7 +1453,8 @@ + + void throwExcept2(const Ice::AsyncResultPtr& result) + { +- wstring in = getIn(in, InParamPtr::dynamicCast(result->getCookie())); ++ wstring in; ++ in = getIn(in, InParamPtr::dynamicCast(result->getCookie())); + try + { + Test2::WstringClassPrx t = Test2::WstringClassPrx::uncheckedCast(result->getProxy()); diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-info-AllTests.cpp files/patch-cpp-test-Ice-info-AllTests.cpp --- ../ice.orig/files/patch-cpp-test-Ice-info-AllTests.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-info-AllTests.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,31 @@ +--- cpp.orig/test/Ice/info/AllTests.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/Ice/info/AllTests.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -141,9 +141,11 @@ + test(info->adapterName.empty()); + test(info->localPort > 0); + test(info->remotePort == 12010); +- test(info->remoteAddress == defaultHost); +- test(info->localAddress == defaultHost); +- ++ if (!inFreeBSDJail()) ++ { ++ test(info->remoteAddress == defaultHost); ++ test(info->localAddress == defaultHost); ++ } + ostringstream os; + + Ice::Context ctx = testIntf->getConnectionInfoAsContext(); +@@ -163,8 +165,11 @@ + test(info->adapterName.empty()); + test(info->localPort > 0); + test(info->remotePort == 12010); +- test(info->remoteAddress ==defaultHost); +- test(info->localAddress == defaultHost); ++ if (!inFreeBSDJail()) ++ { ++ test(info->remoteAddress == defaultHost); ++ test(info->localAddress == defaultHost); ++ } + } + cout << "ok" << endl; + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Ice-properties-run.py files/patch-cpp-test-Ice-properties-run.py --- ../ice.orig/files/patch-cpp-test-Ice-properties-run.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Ice-properties-run.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,18 @@ +--- cpp.orig/test/Ice/properties/run.py 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/Ice/properties/run.py 2012-03-04 20:14:53.000000000 +0100 +@@ -26,7 +26,7 @@ + # + # Write config + # +-configPath = u"./config/中国_client.config" ++configPath = u"./config/中国_client.config".encode("utf-8") + + TestUtil.createConfig(configPath, + ["# Automatically generated by Ice test driver.", +@@ -38,4 +38,4 @@ + TestUtil.simpleTest(client) + + if os.path.exists(configPath): +- os.remove(configPath) +\ No newline at end of file ++ os.remove(configPath) diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-IceUtil-unicode-Client.cpp files/patch-cpp-test-IceUtil-unicode-Client.cpp --- ../ice.orig/files/patch-cpp-test-IceUtil-unicode-Client.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-IceUtil-unicode-Client.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,13 @@ +--- cpp.orig/test/IceUtil/unicode/Client.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/IceUtil/unicode/Client.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -15,6 +15,10 @@ + # include + #endif + ++#ifdef __FreeBSD__ ++# include ++#endif ++ + using namespace IceUtil; + using namespace std; + diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-Slice-keyword-Client.cpp files/patch-cpp-test-Slice-keyword-Client.cpp --- ../ice.orig/files/patch-cpp-test-Slice-keyword-Client.cpp 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-Slice-keyword-Client.cpp 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,20 @@ +--- cpp.orig/test/Slice/keyword/Client.cpp 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/Slice/keyword/Client.cpp 2012-03-04 20:14:53.000000000 +0100 +@@ -73,6 +73,9 @@ + virtual void ice_response(Ice::Int) {} + virtual void ice_exception(const ::Ice::Exception&) {} + }; ++ ++template ++void unused(T const &) { } + + // + // This section of the test is present to ensure that the C++ types +@@ -86,6 +89,7 @@ + + _cpp_and::_cpp_auto b; + b._cpp_default = 0; ++ unused(b); + + _cpp_and::deletePtr c = new _cpp_and::_cpp_delete(); + c->_cpp_else = ""; diff -ruN --exclude=CVS ../ice.orig/files/patch-cpp-test-include-TestCommon.h files/patch-cpp-test-include-TestCommon.h --- ../ice.orig/files/patch-cpp-test-include-TestCommon.h 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-cpp-test-include-TestCommon.h 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,25 @@ +--- cpp.orig/test/include/TestCommon.h 2011-06-15 21:43:59.000000000 +0200 ++++ cpp/test/include/TestCommon.h 2012-03-04 20:14:53.000000000 +0100 +@@ -17,6 +17,22 @@ + #include + #endif + ++#if defined(__FreeBSD__) ++# include ++# include ++inline bool inFreeBSDJail() ++{ ++ int jailed; ++ size_t size = sizeof(jailed); ++ return (sysctlbyname("security.jail.jailed", &jailed, &size, NULL, 0) != -1 || jailed); ++} ++#else ++inline bool inFreeBSDJail() ++{ ++ return false; ++} ++#endif ++ + void + inline testFailed(const char* expr, const char* file, unsigned int line) + { diff -ruN --exclude=CVS ../ice.orig/files/patch-scripts-TestUtil.py files/patch-scripts-TestUtil.py --- ../ice.orig/files/patch-scripts-TestUtil.py 1970-01-01 01:00:00.000000000 +0100 +++ files/patch-scripts-TestUtil.py 2012-03-04 20:23:34.000000000 +0100 @@ -0,0 +1,44 @@ +--- scripts.orig/TestUtil.py 2011-06-15 21:44:00.000000000 +0200 ++++ scripts/TestUtil.py 2012-03-04 20:14:53.000000000 +0100 +@@ -74,6 +74,25 @@ + def isLinux(): + return sys.platform.startswith("linux") + ++def isFreeBSD(): ++ return sys.platform.startswith("freebsd") ++ ++def sysctl(key): ++ p = subprocess.Popen("sysctl "+key, shell=1, stdout=subprocess.PIPE) ++ try: ++ result = p.communicate()[0].strip().split()[1] ++ except IndexError: ++ return 0 ++ if sys.version_info >= (3,): ++ result = str(result, sys.stdout.encoding) ++ try: ++ return int(result) ++ except ValueError: ++ return result ++ ++def isFreeBSDJail(): ++ return isFreeBSD() and sysctl("security.jail.jailed") ++ + def getCppCompiler(): + compiler = "" + if os.environ.get("CPP_COMPILER", "") != "": +@@ -1590,7 +1609,15 @@ + if isDarwin() and "nodarwin" in config: + print "%s*** test not supported under Darwin%s" % (prefix, suffix) + continue ++ ++ if isFreeBSD() and "nofreebsd" in config: ++ print "%s*** test not supported under FreeBSD%s" % (prefix, suffix) ++ continue + ++ if isFreeBSDJail() and "nofreebsdjail" in config: ++ print "%s*** test not supported within a FreeBSD Jail%s" % (prefix, suffix) ++ continue ++ + if not isWin32() and "win32only" in config: + print "%s*** test only supported under Win32%s" % (prefix, suffix) + continue