summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaleb Tennis <caleb@gentoo.org>2008-11-11 14:56:34 +0000
committerCaleb Tennis <caleb@gentoo.org>2008-11-11 14:56:34 +0000
commit61386544868336bd1912253ed658361524aa12b8 (patch)
tree402f708f9055687b2b3576d2fc1a9d3823ad2fb2 /dev-cpp
parentAdded ~ppc keyword. Closes bug #245839 (diff)
downloadhistorical-61386544868336bd1912253ed658361524aa12b8.tar.gz
historical-61386544868336bd1912253ed658361524aa12b8.tar.bz2
historical-61386544868336bd1912253ed658361524aa12b8.zip
rev bump with upstream patchsets since 3.3.0 release
Package-Manager: portage-2.2_rc12/cvs/Linux 2.6.21-gentoo-r1 i686
Diffstat (limited to 'dev-cpp')
-rw-r--r--dev-cpp/Ice/ChangeLog11
-rw-r--r--dev-cpp/Ice/Ice-3.3.0-r1.ebuild83
-rw-r--r--dev-cpp/Ice/Manifest20
-rw-r--r--dev-cpp/Ice/files/Ice-3.3.0-p1.patch51
-rw-r--r--dev-cpp/Ice/files/Ice-3.3.0-p3.patch17
-rw-r--r--dev-cpp/Ice/files/Ice-3.3.0-p4.patch57
-rw-r--r--dev-cpp/Ice/files/Ice-3.3.0-p5.patch25
-rw-r--r--dev-cpp/Ice/files/Ice-3.3.0-p6.patch41
-rw-r--r--dev-cpp/Ice/files/Ice-3.3.0-p7.patch475
-rw-r--r--dev-cpp/Ice/files/Ice-3.3.0-p8.patch232
10 files changed, 1000 insertions, 12 deletions
diff --git a/dev-cpp/Ice/ChangeLog b/dev-cpp/Ice/ChangeLog
index ad3440f9f24c..e3888c80d642 100644
--- a/dev-cpp/Ice/ChangeLog
+++ b/dev-cpp/Ice/ChangeLog
@@ -1,6 +1,15 @@
# ChangeLog for dev-cpp/Ice
# Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-cpp/Ice/ChangeLog,v 1.16 2008/08/23 18:28:46 maekke Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-cpp/Ice/ChangeLog,v 1.17 2008/11/11 14:56:33 caleb Exp $
+
+*Ice-3.3.0-r1 (11 Nov 2008)
+
+ 11 Nov 2008; Caleb Tennis <caleb@gentoo.org> +files/Ice-3.3.0-p1.patch,
+ +files/Ice-3.3.0-p3.patch, +files/Ice-3.3.0-p4.patch,
+ +files/Ice-3.3.0-p5.patch, +files/Ice-3.3.0-p6.patch,
+ +files/Ice-3.3.0-p7.patch, +files/Ice-3.3.0-p8.patch,
+ +Ice-3.3.0-r1.ebuild:
+ rev bump with upstream patchsets since 3.3.0 release
23 Aug 2008; Markus Meier <maekke@gentoo.org> Ice-3.3.0.ebuild:
add ~amd64, bug #235186
diff --git a/dev-cpp/Ice/Ice-3.3.0-r1.ebuild b/dev-cpp/Ice/Ice-3.3.0-r1.ebuild
new file mode 100644
index 000000000000..ee6f3df3c5b8
--- /dev/null
+++ b/dev-cpp/Ice/Ice-3.3.0-r1.ebuild
@@ -0,0 +1,83 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-cpp/Ice/Ice-3.3.0-r1.ebuild,v 1.1 2008/11/11 14:56:34 caleb Exp $
+
+inherit eutils
+
+DESCRIPTION="ICE middleware C++ bindings"
+HOMEPAGE="http://www.zeroc.com/index.html"
+SRC_URI="http://www.zeroc.com/download/Ice/3.3/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="ncurses test debug"
+
+RDEPEND=">=dev-libs/expat-2.0.1
+ >=app-arch/bzip2-1.0.4
+ >=dev-libs/openssl-0.9.8g
+ =sys-libs/db-4.6.21*
+ =dev-cpp/libmcpp-2.6.4"
+
+DEPEND="${RDEPEND}
+ ncurses? ( sys-libs/ncurses sys-libs/readline )
+ test? ( >=dev-lang/python-2.4 )"
+
+S=${WORKDIR}/${P}/cpp
+
+pkg_setup() {
+ if built_with_use sys-libs/db nocxx; then
+ eerror "sys-libs/db must be compiled with C++ support!"
+ eerror "Remove the 'nocxx' use flag and try again."
+ die "Fix use flags and re-emerge"
+ fi
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}"/${P}-p1.patch
+ epatch "${FILESDIR}"/${P}-p3.patch
+ epatch "${FILESDIR}"/${P}-p4.patch
+ epatch "${FILESDIR}"/${P}-p5.patch
+ epatch "${FILESDIR}"/${P}-p6.patch
+ epatch "${FILESDIR}"/${P}-p7.patch
+ epatch "${FILESDIR}"/${P}-p8.patch
+
+ epatch "${FILESDIR}"/${P}-Makefile.patch
+
+ MAKE_RULES="${S}/config/Make.rules"
+
+ #if use amd64; then
+ # sed -i -e "s:^#LP64:LP64:g" "${MAKE_RULES}" \
+ # || die "Failed to set lib64 directory"
+ #fi
+
+ if ! use ncurses; then
+ sed -i -e "s#^USE_READLINE.*#USE_READLINE ?= yes#g" \
+ "${MAKE_RULES}" || die "Failed to set no readline"
+ fi
+
+ if ! use debug; then
+ sed -i -e "s:#OPTIMIZE:OPTIMIZE:" \
+ "${MAKE_RULES}" || die "Failed to remove debug"
+ fi
+
+ sed -i -e \
+ "s:.*CXXFLAGS[^\+]*\=\s:CXXFLAGS = ${CXXFLAGS} :g" \
+ "${MAKE_RULES}.Linux" || die "CXXFLAGS patching failed!"
+}
+
+src_compile() {
+ emake || die "make failed"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "Install failed"
+ cp -dpR "${S}"/../slice "${D}"/usr/share/Ice
+}
+
+src_test() {
+ emake test || die "Test failed"
+}
diff --git a/dev-cpp/Ice/Manifest b/dev-cpp/Ice/Manifest
index e4d59e48c311..0d9d00af1683 100644
--- a/dev-cpp/Ice/Manifest
+++ b/dev-cpp/Ice/Manifest
@@ -1,21 +1,19 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
AUX Ice-3.2.0-Makefile.patch 4072 RMD160 40098fa6142aba0f08b72d1ab2f50426d3c0e1ed SHA1 2e63175980d2b1ee420a37a36e9b8c570285967b SHA256 78b8c20f7491749c7ff3806d6130110c4d7145ed3c17699792910b877783e1d1
AUX Ice-3.2.1-Makefile.patch 4072 RMD160 40098fa6142aba0f08b72d1ab2f50426d3c0e1ed SHA1 2e63175980d2b1ee420a37a36e9b8c570285967b SHA256 78b8c20f7491749c7ff3806d6130110c4d7145ed3c17699792910b877783e1d1
AUX Ice-3.3.0-Makefile.patch 2494 RMD160 e9872d64c716d21865ca6282293e95325d5a6363 SHA1 5dda2d42446647aa2b6411acb0213b759f6deaea SHA256 1fa17c02f5d32aa719995d283fc08bfe9b97b5cb4b7628e8463813f367aba525
+AUX Ice-3.3.0-p1.patch 1303 RMD160 a77a613ff40d7c8dd5e9a896177e358b760f0c85 SHA1 2acc699c1f1a10f4263b6895d2fe7dc570ce9b1f SHA256 c4d386772f81d11459b85a890929e6f6298e961ca4b21d6b12d1a46cca9a34ab
+AUX Ice-3.3.0-p3.patch 783 RMD160 e878bead8107b8018c0195b4eadd4e22fdad3671 SHA1 e18927cc44489ae60e759a81940e849b39f9ec48 SHA256 538a83e87a4f38190367d4ff57de5ecae8f2bd31295b59be6d0675d987da40bc
+AUX Ice-3.3.0-p4.patch 1873 RMD160 dad8546db515cf032374bedf8516f87a5e024ab3 SHA1 fcce388248ace2794985b8e4ee0412157631d75d SHA256 b187d977b6f4b818282acd473903add27f96265aa20cf4a460aa1955cddaf257
+AUX Ice-3.3.0-p5.patch 1053 RMD160 4b521b59685367a3794fac638d59fa82bd19e416 SHA1 8a0ba56852c06c1782ffc385f0b9bc1f2d0d4157 SHA256 69731d53bd7be5769659301ac58e87556e1adcb7275bc393e5a80b6a71943d41
+AUX Ice-3.3.0-p6.patch 1532 RMD160 36283e9cd29ea6b67456a3ef24668bee232025d7 SHA1 3bcfd02c6fda995f7ec9c11e3973ef0bd09aaf29 SHA256 b6ce0c6b1f7f2d122f7d0354d04ffe521f65aec3f8cb86076d224d5c39a52dbd
+AUX Ice-3.3.0-p7.patch 12328 RMD160 0ca62f110595b991a3d50ef94a69a84cc4cc06bb SHA1 9e568e1e5db7e279001b46cc918ef7ae4aeae7bc SHA256 f34164846f7a29bc8064c4ada44ca007ea3facd2486ba4744d5fb441ff1a0082
+AUX Ice-3.3.0-p8.patch 6967 RMD160 8ce27985a084916791845c0c0b9dfa1041a3b2b6 SHA1 44dfd12bffcca3212b7f7d32406d1c0be4b07f0e SHA256 63e8282aaa8781ea5396452a0d05e9ee1cf50db40ffc8523e33504a5e14854bf
DIST Ice-3.2.0.tar.gz 2060037 RMD160 b11fc5718f4c86b349bf0ddc15d7cf402720a013 SHA1 e3b91f14f280a2df78ec5bfed2d9c7e97890ea51 SHA256 4698326e39342d2526c8780db996e47d35a09cdc6080be4329980ec5766ce81d
DIST Ice-3.2.1.tar.gz 2090576 RMD160 c3394486ba13e94c2491b0dc48dc19c3e7565ecd SHA1 69fc7dbdff81d7d9300b57f6e495914f3c9e5c19 SHA256 bd24cfe0296d81e2b04ea8d97b32a4f13fdd949d0f038f4c7e0922b395075149
DIST Ice-3.3.0.tar.gz 4260675 RMD160 e85b37c93f12d9ae97c6b7b2f64f506fa051e4f8 SHA1 b599c3a4d1d3006b868bf2cbcd8e2a2d4575fb22 SHA256 73330e29799d08605d51b9fc148fdc11eb01b6c55b7e4bf4dcb8fafd98ba7749
EBUILD Ice-3.2.0.ebuild 1597 RMD160 592d5fad927ded4bbef30b6f6a0ad57d2d430357 SHA1 d02550c064d88063f35fe5d54869c60ae9c06393 SHA256 f2e8c96032a6b39095ef67c9fb82b40ee465b584861dfa307d34c45dc1f853f0
EBUILD Ice-3.2.1.ebuild 1609 RMD160 b258a9d434fec08faaea2c357a1625eba76f737d SHA1 d25b901dc258aa2a3af071b9e8a8c68760f043b2 SHA256 46d997436e8c456f5f62b8d76024de51d25e0761ff841fee531ccd352cdcc7eb
+EBUILD Ice-3.3.0-r1.ebuild 2011 RMD160 e6e20e6eb6c3268ee1c919592a62fbd343d63da0 SHA1 1f7d9d63e831391c80bd783db66661c0a5320d01 SHA256 42edc86593cac12449796e1385bf14d352ed2306232071af14880e02ca7a44a8
EBUILD Ice-3.3.0.ebuild 1756 RMD160 623fad284cbbe3b5ecdd9b0e408024050b74ec14 SHA1 6b9c0991ab7f4594b1be388b4283014312f9f5ba SHA256 33dff9cf250d7f4f19bb5519751cbd3498b9a3b747a1af11566cff07daee8448
-MISC ChangeLog 4775 RMD160 dd5d568d23dc031b28412148f69b81c7b341bb6a SHA1 b8a81f67205e232dd366aa3dc5bf7b79da554d39 SHA256 e1786d341182ebdf4b2f0dc9783744c11cb679bcd846e9c9dad3d8a73e83eb64
+MISC ChangeLog 5125 RMD160 00e0eecd8677ecc9fcab0bef1af14469c4d6ab7f SHA1 ffd55afa679a813f14d48c604a3bd19a52843d6a SHA256 03b31e1e0951f75f5a24e315c62ed7eb9a611ae4574b0a992ad3dfdf9ab905a8
MISC metadata.xml 339 RMD160 f92a68fdab5aad40e9c173ebd1ed26b5963acf9f SHA1 3dfd85c450884b0fb534b7d54cfb6837dfa5c764 SHA256 dec27f6d803819a7791826c1a98a83a1c21a23df0a3384234ac68abf8b8466a3
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.9 (GNU/Linux)
-
-iEYEARECAAYFAkiwVzAACgkQkKaRLQcq0GJehwCffWxFyCDejRVBxe7W00PBDYrm
-tAkAnA18E6aj5F3KCt8NCoNlpeQtwpr9
-=BucM
------END PGP SIGNATURE-----
diff --git a/dev-cpp/Ice/files/Ice-3.3.0-p1.patch b/dev-cpp/Ice/files/Ice-3.3.0-p1.patch
new file mode 100644
index 000000000000..91198baba5f6
--- /dev/null
+++ b/dev-cpp/Ice/files/Ice-3.3.0-p1.patch
@@ -0,0 +1,51 @@
+diff -c -r -N Ice-3.3.0-orig/cpp/src/Slice/Util.cpp Ice-3.3.0/cpp/src/Slice/Util.cpp
+*** Ice-3.3.0-orig/cpp/src/Slice/Util.cpp Tue Jun 24 10:28:04 2008
+--- Ice-3.3.0/cpp/src/Slice/Util.cpp Tue Jun 24 10:44:19 2008
+***************
+*** 49,57 ****
+ ++pos;
+ }
+ }
+! if(result[result.size() - 1] == '/') // Remove trailing '/'
+ {
+! result.erase(result.size() - 1);
+ }
+ return result;
+ }
+--- 49,65 ----
+ ++pos;
+ }
+ }
+!
+! if(result.size() > 1) // Remove trailing "/" or "/."
+ {
+! if(result[result.size() - 1] == '/')
+! {
+! result.erase(result.size() - 1);
+! }
+! else if(result[result.size() - 2] == '/' && result[result.size() - 1] == '.')
+! {
+! result.erase(result.size() - (result.size() == 2 ? 1 : 2));
+! }
+ }
+ return result;
+ }
+***************
+*** 159,164 ****
+--- 167,181 ----
+ }
+ }
+
++ if(result == file)
++ {
++ //
++ // Don't return a full path if we couldn't reduce the given path, instead
++ // return the normalized given path.
++ //
++ result = normalizePath(orig);
++ }
++
+ string::size_type pos;
+ if((pos = result.rfind('.')) != string::npos)
+ {
+
diff --git a/dev-cpp/Ice/files/Ice-3.3.0-p3.patch b/dev-cpp/Ice/files/Ice-3.3.0-p3.patch
new file mode 100644
index 000000000000..bc8732c5300a
--- /dev/null
+++ b/dev-cpp/Ice/files/Ice-3.3.0-p3.patch
@@ -0,0 +1,17 @@
+diff --git a/cpp/src/Ice/ConnectRequestHandler.cpp b/cpp/src/Ice/ConnectRequestHandler.cpp
+index e037745..8c93f22 100644
+--- a/cpp/src/Ice/ConnectRequestHandler.cpp
++++ b/cpp/src/Ice/ConnectRequestHandler.cpp
+@@ -212,7 +212,10 @@ ConnectRequestHandler::abortBatchRequest()
+ Ice::ConnectionI*
+ ConnectRequestHandler::sendRequest(Outgoing* out)
+ {
+- if(!getConnection(true)->sendRequest(out, _compress, _response) || _response)
++ // Must be called first, _compress might not be initialized before this returns.
++ Ice::ConnectionIPtr connection = getConnection(true);
++ assert(connection);
++ if(!connection->sendRequest(out, _compress, _response) || _response)
+ {
+ return _connection.get(); // The request has been sent or we're expecting a response.
+ }
+
diff --git a/dev-cpp/Ice/files/Ice-3.3.0-p4.patch b/dev-cpp/Ice/files/Ice-3.3.0-p4.patch
new file mode 100644
index 000000000000..5e89b0b0961b
--- /dev/null
+++ b/dev-cpp/Ice/files/Ice-3.3.0-p4.patch
@@ -0,0 +1,57 @@
+diff -r -c -N ../Ice-3.3.0-old/cpp/src/Slice/Preprocessor.cpp ./cpp/src/Slice/Preprocessor.cpp
+*** ../Ice-3.3.0-old/cpp/src/Slice/Preprocessor.cpp 2008-05-16 14:54:01.000000000 -0230
+--- ./cpp/src/Slice/Preprocessor.cpp 2008-08-14 11:31:58.000000000 -0230
+***************
+*** 175,192 ****
+ //
+ char* buf = mcpp_get_mem_buffer(Out);
+
+- _cppFile = ".preprocess." + IceUtil::generateUUID();
+- SignalHandler::addFile(_cppFile);
+ #ifdef _WIN32
+ _cppHandle = ::_wfopen(IceUtil::stringToWstring(_cppFile).c_str(), IceUtil::stringToWstring("w+").c_str());
+ #else
+ _cppHandle = ::fopen(_cppFile.c_str(), "w+");
+ #endif
+! if(buf)
+ {
+! ::fwrite(buf, strlen(buf), 1, _cppHandle);
+ }
+- ::rewind(_cppHandle);
+ }
+
+ //
+--- 175,206 ----
+ //
+ char* buf = mcpp_get_mem_buffer(Out);
+
+ #ifdef _WIN32
++ TCHAR buffer[512];
++ DWORD ret = GetTempPath(512, buffer);
++ if(ret > 512 || ret == 0)
++ {
++ fprintf(stderr, "GetTempPath failed (%d)\n", GetLastError());
++ }
++ _cppFile = string(buffer) + "\\.preprocess." + IceUtil::generateUUID();
+ _cppHandle = ::_wfopen(IceUtil::stringToWstring(_cppFile).c_str(), IceUtil::stringToWstring("w+").c_str());
+ #else
++ _cppFile = "/tmp/.preprocess." + IceUtil::generateUUID();
+ _cppHandle = ::fopen(_cppFile.c_str(), "w+");
+ #endif
+! if(_cppHandle != NULL)
+! {
+! SignalHandler::addFile(_cppFile);
+! if(buf)
+! {
+! ::fwrite(buf, strlen(buf), 1, _cppHandle);
+! }
+! ::rewind(_cppHandle);
+! }
+! else
+ {
+! fprintf(stderr, "Could not open temporary file: %s\n", _cppFile.c_str());
+ }
+ }
+
+ //
+
diff --git a/dev-cpp/Ice/files/Ice-3.3.0-p5.patch b/dev-cpp/Ice/files/Ice-3.3.0-p5.patch
new file mode 100644
index 000000000000..393aa889cab1
--- /dev/null
+++ b/dev-cpp/Ice/files/Ice-3.3.0-p5.patch
@@ -0,0 +1,25 @@
+diff --git a/cpp/src/IceGrid/LocatorI.cpp b/cpp/src/IceGrid/LocatorI.cpp
+index bf910ba..554a170 100644
+--- a/cpp/src/IceGrid/LocatorI.cpp
++++ b/cpp/src/IceGrid/LocatorI.cpp
+@@ -588,13 +588,15 @@ LocatorI::activate(const LocatorAdapterInfo& adapter, const RequestPtr& request)
+ // we just add this one to the queue. If not, we add it to the queue and initiate
+ // a call on the adapter to get its direct proxy.
+ //
+- PendingRequestsMap::iterator p;
+- p = _pendingRequests.insert(make_pair(adapter.id, PendingRequests())).first;
+- p->second.insert(request);
+- if(p->second.size() != 1)
++ PendingRequestsMap::iterator p = _pendingRequests.find(adapter.id);
++ if(p != _pendingRequests.end())
+ {
++ p->second.insert(request);
+ return;
+ }
++
++ p = _pendingRequests.insert(make_pair(adapter.id, PendingRequests())).first;
++ p->second.insert(request);
+ }
+
+ AMI_Adapter_activatePtr amiCB = new AMI_Adapter_activateI(this, adapter.id);
+
diff --git a/dev-cpp/Ice/files/Ice-3.3.0-p6.patch b/dev-cpp/Ice/files/Ice-3.3.0-p6.patch
new file mode 100644
index 000000000000..25abc3f41801
--- /dev/null
+++ b/dev-cpp/Ice/files/Ice-3.3.0-p6.patch
@@ -0,0 +1,41 @@
+diff --git a/cpp/src/IceGrid/LocatorI.cpp b/cpp/src/IceGrid/LocatorI.cpp
+index 554a170..3fbe3a1 100644
+--- a/cpp/src/IceGrid/LocatorI.cpp
++++ b/cpp/src/IceGrid/LocatorI.cpp
+@@ -236,12 +236,15 @@ LocatorI::Request::activate(const string& id)
+ // NOTE: we use a timeout large enough to ensure that the activate() call won't
+ // timeout if the server hangs in deactivation and/or activation.
+ //
+- for(LocatorAdapterInfoSeq::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p)
+ {
+- if(p->id == id)
++ Lock sync(*this);
++ for(LocatorAdapterInfoSeq::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p)
+ {
+- _locator->activate(*p, this);
+- _activating.insert(id);
++ if(p->id == id)
++ {
++ _locator->activate(*p, this);
++ _activating.insert(id);
++ }
+ }
+ }
+
+@@ -684,7 +687,14 @@ LocatorI::removePendingResolve(const string& adapterId, int roundRobinCount)
+ //
+ if(roundRobinCount > 0)
+ {
+- _database->getAdapter(adapterId)->increaseRoundRobinCount(roundRobinCount);
++ try
++ {
++ _database->getAdapter(adapterId)->increaseRoundRobinCount(roundRobinCount);
++ }
++ catch(const Ice::Exception&)
++ {
++ // Ignore.
++ }
+ }
+
+ map<string, deque<Ice::AMD_Locator_findAdapterByIdPtr> >::iterator p = _resolves.find(adapterId);
+
diff --git a/dev-cpp/Ice/files/Ice-3.3.0-p7.patch b/dev-cpp/Ice/files/Ice-3.3.0-p7.patch
new file mode 100644
index 000000000000..fcdf85ec5961
--- /dev/null
+++ b/dev-cpp/Ice/files/Ice-3.3.0-p7.patch
@@ -0,0 +1,475 @@
+diff --git a/cpp/include/Ice/OutgoingAsync.h b/cpp/include/Ice/OutgoingAsync.h
+index ae16ece..70f3cf2 100644
+--- a/cpp/include/Ice/OutgoingAsync.h
++++ b/cpp/include/Ice/OutgoingAsync.h
+@@ -25,6 +25,7 @@ namespace IceInternal
+ class BasicStream;
+ class LocalExceptionWrapper;
+ class Outgoing;
++class RetryTask;
+
+ class ICE_API OutgoingAsyncMessageCallback : virtual public IceUtil::Shared
+ {
+@@ -49,6 +50,8 @@ public:
+
+ protected:
+
++ friend class ::IceInternal::RetryTask;
++
+ void __acquireCallback(const Ice::ObjectPrx&);
+ void __releaseCallback(const Ice::LocalException&);
+ void __releaseCallback()
+@@ -83,6 +86,7 @@ public:
+ void __finished(const Ice::LocalException&);
+ void __finished(const LocalExceptionWrapper&);
+
++ void __retry(int);
+ bool __send();
+
+ protected:
+diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp
+index 8a1e5f4..b26a194 100644
+--- a/cpp/src/Ice/Instance.cpp
++++ b/cpp/src/Ice/Instance.cpp
+@@ -29,6 +29,7 @@
+ #include <Ice/LoggerI.h>
+ #include <Ice/Network.h>
+ #include <Ice/EndpointFactoryManager.h>
++#include <Ice/RetryQueue.h>
+ #include <Ice/TcpEndpointI.h>
+ #include <Ice/UdpEndpointI.h>
+ #include <Ice/DynamicLibrary.h>
+@@ -285,6 +286,19 @@ IceInternal::Instance::endpointHostResolver()
+ return _endpointHostResolver;
+ }
+
++RetryQueuePtr
++IceInternal::Instance::retryQueue()
++{
++ IceUtil::RecMutex::Lock sync(*this);
++
++ if(_state == StateDestroyed)
++ {
++ throw CommunicatorDestroyedException(__FILE__, __LINE__);
++ }
++
++ return _retryQueue;
++}
++
+ IceUtil::TimerPtr
+ IceInternal::Instance::timer()
+ {
+@@ -991,6 +1005,8 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi
+ _servantFactoryManager = new ObjectFactoryManager();
+
+ _objectAdapterFactory = new ObjectAdapterFactory(this, communicator);
++
++ _retryQueue = new RetryQueue(this);
+
+ if(_initData.wstringConverter == 0)
+ {
+@@ -1039,6 +1055,7 @@ IceInternal::Instance::~Instance()
+ assert(!_serverThreadPool);
+ assert(!_selectorThread);
+ assert(!_endpointHostResolver);
++ assert(!_retryQueue);
+ assert(!_timer);
+ assert(!_routerManager);
+ assert(!_locatorManager);
+@@ -1200,6 +1217,11 @@ IceInternal::Instance::destroy()
+ _outgoingConnectionFactory->waitUntilFinished();
+ }
+
++ if(_retryQueue)
++ {
++ _retryQueue->destroy();
++ }
++
+ ThreadPoolPtr serverThreadPool;
+ ThreadPoolPtr clientThreadPool;
+ SelectorThreadPtr selectorThread;
+@@ -1210,6 +1232,7 @@ IceInternal::Instance::destroy()
+
+ _objectAdapterFactory = 0;
+ _outgoingConnectionFactory = 0;
++ _retryQueue = 0;
+
+ if(_connectionMonitor)
+ {
+diff --git a/cpp/src/Ice/Instance.h b/cpp/src/Ice/Instance.h
+index f0aa50a..721b347 100644
+--- a/cpp/src/Ice/Instance.h
++++ b/cpp/src/Ice/Instance.h
+@@ -30,6 +30,7 @@
+ #include <Ice/ObjectFactoryManagerF.h>
+ #include <Ice/ObjectAdapterFactoryF.h>
+ #include <Ice/EndpointFactoryManagerF.h>
++#include <Ice/RetryQueueF.h>
+ #include <Ice/DynamicLibraryF.h>
+ #include <Ice/PluginF.h>
+ #include <Ice/Initialize.h>
+@@ -71,6 +72,7 @@ public:
+ ThreadPoolPtr serverThreadPool();
+ SelectorThreadPtr selectorThread();
+ EndpointHostResolverPtr endpointHostResolver();
++ RetryQueuePtr retryQueue();
+ IceUtil::TimerPtr timer();
+ EndpointFactoryManagerPtr endpointFactoryManager() const;
+ DynamicLibraryListPtr dynamicLibraryList() const;
+@@ -134,6 +136,7 @@ private:
+ ThreadPoolPtr _serverThreadPool;
+ SelectorThreadPtr _selectorThread;
+ EndpointHostResolverPtr _endpointHostResolver;
++ RetryQueuePtr _retryQueue;
+ IceUtil::TimerPtr _timer;
+ EndpointFactoryManagerPtr _endpointFactoryManager;
+ DynamicLibraryListPtr _dynamicLibraryList;
+diff --git a/cpp/src/Ice/Makefile b/cpp/src/Ice/Makefile
+index f236dd4..dbf931e 100644
+--- a/cpp/src/Ice/Makefile
++++ b/cpp/src/Ice/Makefile
+@@ -80,6 +80,7 @@ OBJS = Acceptor.o \
+ Proxy.o \
+ ReferenceFactory.o \
+ Reference.o \
++ RetryQueue.o \
+ RequestHandler.o \
+ RouterInfo.o \
+ Router.o \
+diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp
+index 14da199..c866fe1 100644
+--- a/cpp/src/Ice/OutgoingAsync.cpp
++++ b/cpp/src/Ice/OutgoingAsync.cpp
+@@ -24,6 +24,7 @@
+ #include <Ice/ReplyStatus.h>
+ #include <Ice/ImplicitContextI.h>
+ #include <Ice/ThreadPool.h>
++#include <Ice/RetryQueue.h>
+
+ using namespace std;
+ using namespace Ice;
+@@ -454,6 +455,24 @@ IceInternal::OutgoingAsync::__finished(const LocalExceptionWrapper& ex)
+ }
+ }
+
++void
++IceInternal::OutgoingAsync::__retry(int interval)
++{
++ //
++ // This method is called by the proxy to retry an invocation, no
++ // other threads can access this object.
++ //
++ if(interval > 0)
++ {
++ assert(__os);
++ __os->instance()->retryQueue()->add(this, interval);
++ }
++ else
++ {
++ __send();
++ }
++}
++
+ bool
+ IceInternal::OutgoingAsync::__send()
+ {
+@@ -466,11 +485,11 @@ IceInternal::OutgoingAsync::__send()
+ }
+ catch(const LocalExceptionWrapper& ex)
+ {
+- handleException(ex);
++ handleException(ex); // Might call __send() again upon retry and assign _sentSynchronously
+ }
+ catch(const Ice::LocalException& ex)
+ {
+- handleException(ex);
++ handleException(ex); // Might call __send() again upon retry and assign _sentSynchronously
+ }
+ return _sentSynchronously;
+ }
+@@ -483,6 +502,7 @@ IceInternal::OutgoingAsync::__prepare(const ObjectPrx& prx, const string& operat
+ _delegate = 0;
+ _cnt = 0;
+ _mode = mode;
++ _sentSynchronously = false;
+
+ //
+ // Can't call async via a batch proxy.
+diff --git a/cpp/src/Ice/ProxyFactory.cpp b/cpp/src/Ice/ProxyFactory.cpp
+index 2fc5316..eeb554d 100644
+--- a/cpp/src/Ice/ProxyFactory.cpp
++++ b/cpp/src/Ice/ProxyFactory.cpp
+@@ -25,32 +25,8 @@ using namespace std;
+ using namespace Ice;
+ using namespace IceInternal;
+
+-namespace
+-{
+-
+-class RetryTask : public IceUtil::TimerTask
+-{
+-public:
+-
+- RetryTask(const OutgoingAsyncPtr& out) : _out(out)
+- {
+- }
+-
+- virtual void
+- runTimerTask()
+- {
+- _out->__send();
+- }
+-
+-private:
+-
+- const OutgoingAsyncPtr _out;
+-};
+-
+-}
+-
+ IceUtil::Shared* IceInternal::upCast(ProxyFactory* p) { return p; }
+-
++
+ ObjectPrx
+ IceInternal::ProxyFactory::stringToProxy(const string& str) const
+ {
+@@ -243,34 +219,17 @@ IceInternal::ProxyFactory::checkRetryAfterException(const LocalException& ex,
+ }
+ out << " because of exception\n" << ex;
+ }
+-
+- if(interval > 0)
++
++ if(out)
+ {
+- if(out)
+- {
+- try
+- {
+- _instance->timer()->schedule(new RetryTask(out), IceUtil::Time::milliSeconds(interval));
+- }
+- catch(const IceUtil::IllegalArgumentException&) // Expected if the communicator destroyed the timer.
+- {
+- throw CommunicatorDestroyedException(__FILE__, __LINE__);
+- }
+- }
+- else
+- {
+- //
+- // Sleep before retrying.
+- //
+- IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(interval));
+- }
++ out->__retry(interval);
+ }
+- else
++ else if(interval > 0)
+ {
+- if(out)
+- {
+- out->__send();
+- }
++ //
++ // Sleep before retrying.
++ //
++ IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(interval));
+ }
+ }
+
+diff --git a/cpp/src/Ice/RetryQueue.cpp b/cpp/src/Ice/RetryQueue.cpp
+new file mode 100644
+index 0000000..d6aba62
+--- /dev/null
++++ b/cpp/src/Ice/RetryQueue.cpp
+@@ -0,0 +1,92 @@
++// **********************************************************************
++//
++// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
++//
++// This copy of Ice is licensed to you under the terms described in the
++// ICE_LICENSE file included in this distribution.
++//
++// **********************************************************************
++
++#include <Ice/RetryQueue.h>
++#include <Ice/OutgoingAsync.h>
++#include <Ice/LocalException.h>
++#include <Ice/Instance.h>
++
++using namespace std;
++using namespace Ice;
++using namespace IceInternal;
++
++IceUtil::Shared* IceInternal::upCast(RetryQueue* p) { return p; }
++
++IceInternal::RetryTask::RetryTask(const RetryQueuePtr& queue, const OutgoingAsyncPtr& outAsync) :
++ _queue(queue), _outAsync(outAsync)
++{
++}
++
++void
++IceInternal::RetryTask::runTimerTask()
++{
++ if(_queue->remove(this))
++ {
++ try
++ {
++ _outAsync->__send();
++ }
++ catch(const Ice::LocalException& ex)
++ {
++ _outAsync->__releaseCallback(ex);
++ }
++ }
++}
++
++void
++IceInternal::RetryTask::destroy()
++{
++ _outAsync->__releaseCallback(CommunicatorDestroyedException(__FILE__, __LINE__));
++}
++
++bool
++IceInternal::RetryTask::operator<(const RetryTask& rhs) const
++{
++ return this < &rhs;
++}
++
++IceInternal::RetryQueue::RetryQueue(const InstancePtr& instance) : _instance(instance)
++{
++}
++
++void
++IceInternal::RetryQueue::add(const OutgoingAsyncPtr& out, int interval)
++{
++ Lock sync(*this);
++ RetryTaskPtr task = new RetryTask(this, out);
++ try
++ {
++ _instance->timer()->schedule(task, IceUtil::Time::milliSeconds(interval));
++ }
++ catch(const IceUtil::IllegalArgumentException&) // Expected if the communicator destroyed the timer.
++ {
++ throw CommunicatorDestroyedException(__FILE__, __LINE__);
++ }
++ _requests.insert(task);
++}
++
++void
++IceInternal::RetryQueue::destroy()
++{
++ Lock sync(*this);
++ for(set<RetryTaskPtr>::const_iterator p = _requests.begin(); p != _requests.end(); ++p)
++ {
++ _instance->timer()->cancel(*p);
++ (*p)->destroy();
++ }
++ _requests.clear();
++}
++
++bool
++IceInternal::RetryQueue::remove(const RetryTaskPtr& task)
++{
++ Lock sync(*this);
++ return _requests.erase(task) > 0;
++}
++
+diff --git a/cpp/src/Ice/RetryQueue.h b/cpp/src/Ice/RetryQueue.h
+new file mode 100644
+index 0000000..960b4a8
+--- /dev/null
++++ b/cpp/src/Ice/RetryQueue.h
+@@ -0,0 +1,62 @@
++// **********************************************************************
++//
++// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
++//
++// This copy of Ice is licensed to you under the terms described in the
++// ICE_LICENSE file included in this distribution.
++//
++// **********************************************************************
++
++#ifndef ICE_RETRY_QUEUE_H
++#define ICE_RETRY_QUEUE_H
++
++#include <IceUtil/Shared.h>
++#include <IceUtil/Mutex.h>
++#include <IceUtil/Timer.h>
++#include <Ice/RetryQueueF.h>
++#include <Ice/OutgoingAsyncF.h>
++#include <Ice/InstanceF.h>
++
++namespace IceInternal
++{
++
++class RetryTask : public IceUtil::TimerTask
++{
++public:
++
++ RetryTask(const RetryQueuePtr&, const OutgoingAsyncPtr&);
++
++ virtual void runTimerTask();
++ void destroy();
++
++ bool operator<(const RetryTask&) const;
++
++private:
++
++ const RetryQueuePtr _queue;
++ const OutgoingAsyncPtr _outAsync;
++};
++typedef IceUtil::Handle<RetryTask> RetryTaskPtr;
++
++class RetryQueue : public IceUtil::Shared, public IceUtil::Mutex
++{
++public:
++
++ RetryQueue(const InstancePtr&);
++
++ void add(const OutgoingAsyncPtr&, int);
++ void destroy();
++
++private:
++
++ bool remove(const RetryTaskPtr&);
++ friend class RetryTask;
++
++ const InstancePtr _instance;
++ std::set<RetryTaskPtr> _requests;
++};
++
++}
++
++#endif
++
+diff --git a/cpp/src/Ice/RetryQueueF.h b/cpp/src/Ice/RetryQueueF.h
+new file mode 100644
+index 0000000..0e99fd7
+--- /dev/null
++++ b/cpp/src/Ice/RetryQueueF.h
+@@ -0,0 +1,24 @@
++// **********************************************************************
++//
++// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
++//
++// This copy of Ice is licensed to you under the terms described in the
++// ICE_LICENSE file included in this distribution.
++//
++// **********************************************************************
++
++#ifndef ICE_RETRY_QUEUE_F_H
++#define ICE_RETRY_QUEUE_F_H
++
++#include <Ice/Handle.h>
++
++namespace IceInternal
++{
++
++class RetryQueue;
++IceUtil::Shared* upCast(RetryQueue*);
++typedef Handle<RetryQueue> RetryQueuePtr;
++
++}
++
++#endif
+
diff --git a/dev-cpp/Ice/files/Ice-3.3.0-p8.patch b/dev-cpp/Ice/files/Ice-3.3.0-p8.patch
new file mode 100644
index 000000000000..d87b1f6db868
--- /dev/null
+++ b/dev-cpp/Ice/files/Ice-3.3.0-p8.patch
@@ -0,0 +1,232 @@
+diff -c -r -N ../Ice-3.3.0/cpp/include/IceUtil/StringUtil.h ./cpp/include/IceUtil/StringUtil.h
+*** ../Ice-3.3.0/cpp/include/IceUtil/StringUtil.h 2008-05-16 14:54:00.000000000 -0230
+--- ./cpp/include/IceUtil/StringUtil.h 2008-10-30 12:51:39.000000000 -0230
+***************
+*** 65,70 ****
+--- 65,82 ----
+ #else
+ ICE_UTIL_API std::string errorToString(int);
+ #endif
++
++ //
++ // Functions to convert to to all lower/upper case
++ //
++ ICE_UTIL_API std::string toLower(const std::string&);
++ ICE_UTIL_API std::string toUpper(const std::string&);
++
++ //
++ // Remove all whitespace from a string
++ //
++ ICE_UTIL_API std::string removeWhitespace(const std::string&);
++
+ }
+
+ #endif
+diff -c -r -N ../Ice-3.3.0/cpp/src/IcePatch2/Calc.cpp ./cpp/src/IcePatch2/Calc.cpp
+*** ../Ice-3.3.0/cpp/src/IcePatch2/Calc.cpp 2008-05-16 14:54:00.000000000 -0230
+--- ./cpp/src/IcePatch2/Calc.cpp 2008-10-30 13:04:19.000000000 -0230
+***************
+*** 42,48 ****
+
+ for(string::size_type i = 0; i < lhs.path.size(); ++i)
+ {
+! if(::tolower(lhs.path[i]) != ::tolower(rhs.path[i]))
+ {
+ return false;
+ }
+--- 42,48 ----
+
+ for(string::size_type i = 0; i < lhs.path.size(); ++i)
+ {
+! if(::tolower(static_cast<unsigned char>(lhs.path[i])) != ::tolower(static_cast<unsigned char>(rhs.path[i])))
+ {
+ return false;
+ }
+***************
+*** 59,69 ****
+ {
+ for(string::size_type i = 0; i < lhs.path.size() && i < rhs.path.size(); ++i)
+ {
+! if(::tolower(lhs.path[i]) < ::tolower(rhs.path[i]))
+ {
+ return true;
+ }
+! else if(::tolower(lhs.path[i]) > ::tolower(rhs.path[i]))
+ {
+ return false;
+ }
+--- 59,70 ----
+ {
+ for(string::size_type i = 0; i < lhs.path.size() && i < rhs.path.size(); ++i)
+ {
+! if(::tolower(static_cast<unsigned char>(lhs.path[i])) < ::tolower(static_cast<unsigned char>(rhs.path[i])))
+ {
+ return true;
+ }
+! else if(::tolower(static_cast<unsigned char>(lhs.path[i])) >
+! ::tolower(static_cast<unsigned char>(rhs.path[i])))
+ {
+ return false;
+ }
+diff -c -r -N ../Ice-3.3.0/cpp/src/IcePatch2/Client.cpp ./cpp/src/IcePatch2/Client.cpp
+*** ../Ice-3.3.0/cpp/src/IcePatch2/Client.cpp 2008-05-16 14:54:00.000000000 -0230
+--- ./cpp/src/IcePatch2/Client.cpp 2008-10-30 12:58:41.000000000 -0230
+***************
+*** 8,13 ****
+--- 8,14 ----
+ // **********************************************************************
+
+ #include <IceUtil/Options.h>
++ #include <IceUtil/StringUtil.h>
+ #include <Ice/Application.h>
+ #include <IcePatch2/Util.h>
+ #include <IcePatch2/ClientUtil.h>
+***************
+*** 54,60 ****
+ {
+ cout << "Do a thorough patch? (yes/no)" << endl;
+ cin >> answer;
+! transform(answer.begin(), answer.end(), answer.begin(), ::tolower);
+ if(answer == "no")
+ {
+ return false;
+--- 55,61 ----
+ {
+ cout << "Do a thorough patch? (yes/no)" << endl;
+ cin >> answer;
+! answer = IceUtilInternal::toLower(answer);
+ if(answer == "no")
+ {
+ return false;
+diff -c -r -N ../Ice-3.3.0/cpp/src/IcePatch2/Util.cpp ./cpp/src/IcePatch2/Util.cpp
+*** ../Ice-3.3.0/cpp/src/IcePatch2/Util.cpp 2008-05-16 14:54:00.000000000 -0230
+--- ./cpp/src/IcePatch2/Util.cpp 2008-10-30 13:01:05.000000000 -0230
+***************
+*** 280,286 ****
+ }
+
+ if(result == "/." ||
+! (result.size() == 4 && isalpha(result[0]) && result[1] == ':' && result[2] == '/' && result[3] == '.'))
+ {
+ return result.substr(0, result.size() - 1);
+ }
+--- 280,287 ----
+ }
+
+ if(result == "/." ||
+! (result.size() == 4 && isalpha(static_cast<unsigned char>(result[0])) && result[1] == ':' &&
+! result[2] == '/' && result[3] == '.'))
+ {
+ return result.substr(0, result.size() - 1);
+ }
+***************
+*** 290,296 ****
+ result.erase(result.size() - 2, 2);
+ }
+
+! if(result == "/" || (result.size() == 3 && isalpha(result[0]) && result[1] == ':' && result[2] == '/'))
+ {
+ return result;
+ }
+--- 291,298 ----
+ result.erase(result.size() - 2, 2);
+ }
+
+! if(result == "/" || (result.size() == 3 && isalpha(static_cast<unsigned char>(result[0])) &&
+! result[1] == ':' && result[2] == '/'))
+ {
+ return result;
+ }
+***************
+*** 317,328 ****
+ }
+
+ unsigned i = 0;
+! while(isspace(pa[i]))
+ {
+ ++i;
+ }
+ #ifdef _WIN32
+! return pa[i] == '\\' || pa[i] == '/' || pa.size() > i + 1 && isalpha(pa[i]) && pa[i + 1] == ':';
+ #else
+ return pa[i] == '/';
+ #endif
+--- 319,331 ----
+ }
+
+ unsigned i = 0;
+! while(isspace(static_cast<unsigned char>(pa[i])))
+ {
+ ++i;
+ }
+ #ifdef _WIN32
+! return pa[i] == '\\' || pa[i] == '/' || pa.size() > i + 1 &&
+! isalpha(static_cast<unsigned char>(pa[i])) && pa[i + 1] == ':';
+ #else
+ return pa[i] == '/';
+ #endif
+***************
+*** 333,339 ****
+ {
+ string path = simplify(pa);
+ #ifdef _WIN32
+! return path == "/" || path.size() == 3 && isalpha(path[0]) && path[1] == ':' && path[2] == '/';
+ #else
+ return path == "/";
+ #endif
+--- 336,343 ----
+ {
+ string path = simplify(pa);
+ #ifdef _WIN32
+! return path == "/" || path.size() == 3 && isalpha(static_cast<unsigned char>(path[0])) &&
+! path[1] == ':' && path[2] == '/';
+ #else
+ return path == "/";
+ #endif
+diff -c -r -N ../Ice-3.3.0/cpp/src/IceUtil/StringUtil.cpp ./cpp/src/IceUtil/StringUtil.cpp
+*** ../Ice-3.3.0/cpp/src/IceUtil/StringUtil.cpp 2008-05-16 14:54:01.000000000 -0230
+--- ./cpp/src/IceUtil/StringUtil.cpp 2008-10-30 12:55:40.000000000 -0230
+***************
+*** 687,690 ****
+--- 687,726 ----
+ return errorToString(errno);
+ }
+
++ string
++ IceUtilInternal::toLower(const std::string& s)
++ {
++ string result;
++ for(unsigned int i = 0; i < s.length(); ++ i)
++ {
++ result += tolower(static_cast<unsigned char>(s[i]));
++ }
++ return result;
++ }
++
++ string
++ IceUtilInternal::toUpper(const std::string& s)
++ {
++ string result;
++ for(unsigned int i = 0; i < s.length(); ++ i)
++ {
++ result += toupper(static_cast<unsigned char>(s[i]));
++ }
++ return result;
++ }
++
++ string
++ IceUtilInternal::removeWhitespace(const std::string& s)
++ {
++ string result;
++ for(unsigned int i = 0; i < s.length(); ++ i)
++ {
++ if(!isspace(static_cast<unsigned char>(s[i])))
++ {
++ result += s[i];
++ }
++ }
++ return result;
++ }
++
+ #endif
+