diff options
author | Caleb Tennis <caleb@gentoo.org> | 2008-11-11 14:56:34 +0000 |
---|---|---|
committer | Caleb Tennis <caleb@gentoo.org> | 2008-11-11 14:56:34 +0000 |
commit | 33b2adb500755d1e5fb92603325b3a3651626cc2 (patch) | |
tree | 3999d4ba008ef58c14b2be1433858cdb365a3e30 /dev-cpp/Ice | |
parent | Added ~ppc keyword. Closes bug #245839 (diff) | |
download | gentoo-2-33b2adb500755d1e5fb92603325b3a3651626cc2.tar.gz gentoo-2-33b2adb500755d1e5fb92603325b3a3651626cc2.tar.bz2 gentoo-2-33b2adb500755d1e5fb92603325b3a3651626cc2.zip |
rev bump with upstream patchsets since 3.3.0 release
(Portage version: 2.2_rc12/cvs/Linux 2.6.21-gentoo-r1 i686)
Diffstat (limited to 'dev-cpp/Ice')
-rw-r--r-- | dev-cpp/Ice/ChangeLog | 11 | ||||
-rw-r--r-- | dev-cpp/Ice/Ice-3.3.0-r1.ebuild | 83 | ||||
-rw-r--r-- | dev-cpp/Ice/files/Ice-3.3.0-p1.patch | 51 | ||||
-rw-r--r-- | dev-cpp/Ice/files/Ice-3.3.0-p3.patch | 17 | ||||
-rw-r--r-- | dev-cpp/Ice/files/Ice-3.3.0-p4.patch | 57 | ||||
-rw-r--r-- | dev-cpp/Ice/files/Ice-3.3.0-p5.patch | 25 | ||||
-rw-r--r-- | dev-cpp/Ice/files/Ice-3.3.0-p6.patch | 41 | ||||
-rw-r--r-- | dev-cpp/Ice/files/Ice-3.3.0-p7.patch | 475 | ||||
-rw-r--r-- | dev-cpp/Ice/files/Ice-3.3.0-p8.patch | 232 |
9 files changed, 991 insertions, 1 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/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 + |