diff options
author | Benoit Foucher <benoit@zeroc.com> | 2018-03-30 15:48:57 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2018-03-30 15:48:57 +0200 |
commit | 3b006ffeeb9ac8928419adbf3edf4b851deebcc7 (patch) | |
tree | c65d56fcfe64e899cdc4e91f7e15fbecb7c42d2b /cpp/src/Ice/ConnectionFactory.cpp | |
parent | Support for restart the test controller if it exits (diff) | |
download | ice-3b006ffeeb9ac8928419adbf3edf4b851deebcc7.tar.bz2 ice-3b006ffeeb9ac8928419adbf3edf4b851deebcc7.tar.xz ice-3b006ffeeb9ac8928419adbf3edf4b851deebcc7.zip |
Fix to ensure that object adapter creation fails on iOS if port already in use
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.cpp')
-rw-r--r-- | cpp/src/Ice/ConnectionFactory.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp index a602690cd00..e8a4839eccd 100644 --- a/cpp/src/Ice/ConnectionFactory.cpp +++ b/cpp/src/Ice/ConnectionFactory.cpp @@ -131,19 +131,30 @@ class StartAcceptor : public IceUtil::TimerTask { public: - StartAcceptor(const IncomingConnectionFactoryPtr& factory) : _factory(factory) + StartAcceptor(const IncomingConnectionFactoryPtr& factory, const InstancePtr& instance) : + _factory(factory), _instance(instance) { } void runTimerTask() { - _factory->startAcceptor(); + try + { + _factory->startAcceptor(); + } + catch(const Ice::Exception& ex) + { + Error out(_instance->initializationData().logger); + out << "acceptor creation failed:\n" << ex << '\n' << _factory->toString(); + _instance->timer()->schedule(this, IceUtil::Time::seconds(1)); + } } private: IncomingConnectionFactoryPtr _factory; + InstancePtr _instance; }; } @@ -1610,17 +1621,7 @@ IceInternal::IncomingConnectionFactory::startAcceptor() } _acceptorStopped = false; - - try - { - createAcceptor(); - } - catch(const Ice::Exception& ex) - { - Error out(_instance->initializationData().logger); - out << "acceptor creation failed:\n" << ex << '\n' << _acceptor->toString(); - _instance->timer()->schedule(ICE_MAKE_SHARED(StartAcceptor, ICE_SHARED_FROM_THIS), IceUtil::Time::seconds(1)); - } + createAcceptor(); } void @@ -1852,6 +1853,7 @@ IceInternal::IncomingConnectionFactory::closeAcceptor() // if(!_acceptorStopped && (_state == StateHolding || _state == StateActive)) { - _instance->timer()->schedule(ICE_MAKE_SHARED(StartAcceptor, ICE_SHARED_FROM_THIS), IceUtil::Time::seconds(1)); + _instance->timer()->schedule(ICE_MAKE_SHARED(StartAcceptor, ICE_SHARED_FROM_THIS, _instance), + IceUtil::Time::seconds(1)); } } |