diff options
author | Benoit Foucher <benoit@zeroc.com> | 2015-01-22 13:34:49 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2015-01-22 13:34:49 +0100 |
commit | 612491e1b1da0217922ccae380502e7904299f62 (patch) | |
tree | f12bb0220778d8338e059c031bbec08a83121a56 /cpp/src/Ice/ConnectionFactory.cpp | |
parent | removing lang/CHANGES files (diff) | |
download | ice-612491e1b1da0217922ccae380502e7904299f62.tar.bz2 ice-612491e1b1da0217922ccae380502e7904299f62.tar.xz ice-612491e1b1da0217922ccae380502e7904299f62.zip |
Fixes to align with Ice Touch code
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.cpp')
-rw-r--r-- | cpp/src/Ice/ConnectionFactory.cpp | 134 |
1 files changed, 79 insertions, 55 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp index 34823db170d..a761642cbe9 100644 --- a/cpp/src/Ice/ConnectionFactory.cpp +++ b/cpp/src/Ice/ConnectionFactory.cpp @@ -1216,6 +1216,10 @@ IceInternal::IncomingConnectionFactory::startAsync(SocketOperation) { return false; } + else if(!_acceptor) + { + return true; + } try { @@ -1235,16 +1239,18 @@ IceInternal::IncomingConnectionFactory::startAsync(SocketOperation) bool IceInternal::IncomingConnectionFactory::finishAsync(SocketOperation) { - assert(_acceptor); - try + if(_acceptor) { - _acceptor->finishAccept(); - } - catch(const LocalException& ex) - { - Error out(_instance->initializationData().logger); - out << "couldn't accept connection:\n" << ex << '\n' << _acceptor->toString(); - return false; + try + { + _acceptor->finishAccept(); + } + catch(const LocalException& ex) + { + Error out(_instance->initializationData().logger); + out << "couldn't accept connection:\n" << ex << '\n' << _acceptor->toString(); + return false; + } } return _state < StateClosed; } @@ -1286,6 +1292,11 @@ IceInternal::IncomingConnectionFactory::message(ThreadPoolCurrent& current) _connections.erase(*p); } + if(!_acceptor) + { + return; + } + // // Now accept a new connection. // @@ -1365,11 +1376,9 @@ IceInternal::IncomingConnectionFactory::finished(ThreadPoolCurrent&, bool close) assert(_state == StateClosed); setState(StateFinished); - assert(_acceptor); - - if(close) + if(_acceptor && close) { - closeAcceptor(true); + closeAcceptor(); } } @@ -1382,9 +1391,11 @@ IceInternal::IncomingConnectionFactory::toString() const { return _transceiver->toString(); } - - assert(_acceptor); - return _acceptor->toString(); + else if(_acceptor) + { + return _acceptor->toString(); + } + return string(); } NativeInfoPtr @@ -1447,18 +1458,16 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance } void -IceInternal::IncomingConnectionFactory::initialize(const string& oaName) +IceInternal::IncomingConnectionFactory::initialize() { if(_instance->defaultsAndOverrides()->overrideTimeout) { - const_cast<EndpointIPtr&>(_endpoint) = - _endpoint->timeout(_instance->defaultsAndOverrides()->overrideTimeoutValue); + _endpoint = _endpoint->timeout(_instance->defaultsAndOverrides()->overrideTimeoutValue); } if(_instance->defaultsAndOverrides()->overrideCompress) { - const_cast<EndpointIPtr&>(_endpoint) = - _endpoint->compress(_instance->defaultsAndOverrides()->overrideCompressValue); + _endpoint = _endpoint->compress(_instance->defaultsAndOverrides()->overrideCompressValue); } try @@ -1480,24 +1489,7 @@ IceInternal::IncomingConnectionFactory::initialize(const string& oaName) } else { - const_cast<AcceptorPtr&>(_acceptor) = _endpoint->acceptor(oaName); - assert(_acceptor); - - if(_instance->traceLevels()->network >= 2) - { - Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); - out << "attempting to bind to " << _endpoint->protocol() << " socket " << _acceptor->toString(); - } - - const_cast<EndpointIPtr&>(_endpoint) = _acceptor->listen(); - - if(_instance->traceLevels()->network >= 1) - { - Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); - out << "listening for " << _endpoint->protocol() << " connections\n" << _acceptor->toDetailedString(); - } - - _adapter->getThreadPool()->initialize(this); + createAcceptor(); } } catch(const Ice::Exception&) @@ -1514,19 +1506,6 @@ IceInternal::IncomingConnectionFactory::initialize(const string& oaName) } } - - if(_acceptor) - { - try - { - closeAcceptor(false); - } - catch(const Ice::LocalException&) - { - // Ignore - } - } - _state = StateFinished; _monitor->destroy(); _connections.clear(); @@ -1601,7 +1580,7 @@ IceInternal::IncomingConnectionFactory::setState(State state) // if(_adapter->getThreadPool()->finish(this, true)) { - closeAcceptor(true); + closeAcceptor(); } } else @@ -1626,14 +1605,59 @@ IceInternal::IncomingConnectionFactory::setState(State state) } void -IceInternal::IncomingConnectionFactory::closeAcceptor(bool trace) +IceInternal::IncomingConnectionFactory::createAcceptor() { - if(trace && _instance->traceLevels()->network >= 1) + assert(!_acceptor); + + try + { + _acceptor = _endpoint->acceptor(_adapter->getName()); + assert(_acceptor); + + if(_instance->traceLevels()->network >= 2) + { + Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); + out << "attempting to bind to " << _endpoint->protocol() << " socket " << _acceptor->toString(); + } + + _endpoint = _acceptor->listen(); + + if(_instance->traceLevels()->network >= 1) + { + Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); + out << "listening for " << _endpoint->protocol() << " connections\n" << _acceptor->toDetailedString(); + } + + _adapter->getThreadPool()->initialize(this); + + if(_state == StateActive) + { + _adapter->getThreadPool()->_register(this, SocketOperationRead); + } + } + catch(const Ice::LocalException&) + { + if(_acceptor) + { + _acceptor->close(); + _acceptor = 0; + } + throw; + } +} + +void +IceInternal::IncomingConnectionFactory::closeAcceptor() +{ + assert(_acceptor); + + if(_instance->traceLevels()->network >= 1) { Trace out(_instance->initializationData().logger, _instance->traceLevels()->networkCat); out << "stopping to accept " << _endpoint->protocol() << " connections at " << _acceptor->toString(); } _acceptor->close(); + _acceptor = 0; } |