summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ConnectionFactory.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2015-01-22 13:34:49 +0100
committerBenoit Foucher <benoit@zeroc.com>2015-01-22 13:34:49 +0100
commit612491e1b1da0217922ccae380502e7904299f62 (patch)
treef12bb0220778d8338e059c031bbec08a83121a56 /cpp/src/Ice/ConnectionFactory.cpp
parentremoving lang/CHANGES files (diff)
downloadice-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.cpp134
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;
}