summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ConnectionFactory.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2002-05-31 00:08:10 +0000
committerMarc Laukien <marc@zeroc.com>2002-05-31 00:08:10 +0000
commitf59d63d73f52dc2dad7390b43f964196e369df92 (patch)
tree6e5093e7d628f52ba0ec5061b611930508a5d74f /cpp/src/Ice/ConnectionFactory.cpp
parentglacier batching fixes (diff)
downloadice-f59d63d73f52dc2dad7390b43f964196e369df92.tar.bz2
ice-f59d63d73f52dc2dad7390b43f964196e369df92.tar.xz
ice-f59d63d73f52dc2dad7390b43f964196e369df92.zip
fixed thread pool registration bug
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.cpp')
-rw-r--r--cpp/src/Ice/ConnectionFactory.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp
index 522354d3cc2..27d8bc94c6c 100644
--- a/cpp/src/Ice/ConnectionFactory.cpp
+++ b/cpp/src/Ice/ConnectionFactory.cpp
@@ -432,7 +432,8 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance
_endpoint(endpoint),
_adapter(adapter),
_state(StateHolding),
- _finished(false)
+ _finished(false),
+ _registeredWithPool(false)
{
DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
if (defaultsAndOverrides->overrideTimeout)
@@ -554,12 +555,16 @@ IceInternal::IncomingConnectionFactory::registerWithPool()
{
if (_acceptor)
{
- if (!_serverThreadPool)
+ if (!_registeredWithPool)
{
- _serverThreadPool = _instance->serverThreadPool();
- assert(_serverThreadPool);
+ if (!_serverThreadPool)
+ {
+ _serverThreadPool = _instance->serverThreadPool();
+ assert(_serverThreadPool);
+ }
+ _serverThreadPool->_register(_acceptor->fd(), this);
+ _registeredWithPool = true;
}
- _serverThreadPool->_register(_acceptor->fd(), this);
}
}
@@ -568,7 +573,11 @@ IceInternal::IncomingConnectionFactory::unregisterWithPool()
{
if (_acceptor)
{
- assert(_serverThreadPool);
- _serverThreadPool->unregister(_acceptor->fd());
+ if (_registeredWithPool)
+ {
+ assert(_serverThreadPool);
+ _serverThreadPool->unregister(_acceptor->fd());
+ _registeredWithPool = false;
+ }
}
}