summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Connection.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2002-04-13 14:20:11 +0000
committerMarc Laukien <marc@zeroc.com>2002-04-13 14:20:11 +0000
commit14eb5a90dadb90493192b35dcc241068a9c99550 (patch)
treeb565a551fbfa6163de72015135b424c531a40930 /cpp/src/Ice/Connection.cpp
parentbrought getLocalHost() back (diff)
downloadice-14eb5a90dadb90493192b35dcc241068a9c99550.tar.bz2
ice-14eb5a90dadb90493192b35dcc241068a9c99550.tar.xz
ice-14eb5a90dadb90493192b35dcc241068a9c99550.zip
fixes for the thread pool
Diffstat (limited to 'cpp/src/Ice/Connection.cpp')
-rw-r--r--cpp/src/Ice/Connection.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/cpp/src/Ice/Connection.cpp b/cpp/src/Ice/Connection.cpp
index 01ecb5fe6e5..81e43236ce0 100644
--- a/cpp/src/Ice/Connection.cpp
+++ b/cpp/src/Ice/Connection.cpp
@@ -251,6 +251,17 @@ void
IceInternal::Connection::setAdapter(const ObjectAdapterPtr& adapter)
{
IceUtil::RecMutex::Lock sync(*this);
+
+ if (adapter && !_adapter)
+ {
+ _threadPool->clientIsNowServer();
+ }
+
+ if (!adapter && _adapter)
+ {
+ _threadPool->serverIsNowClient();
+ }
+
_adapter = adapter;
}
@@ -538,11 +549,14 @@ IceInternal::Connection::finished()
{
IceUtil::RecMutex::Lock sync(*this);
- _threadPool->promoteFollower();
+ assert(_state == StateClosed || _state == StateHolding);
- assert(_state == StateClosed);
+ _threadPool->promoteFollower();
- _transceiver->close();
+ if (_state == StateClosed)
+ {
+ _transceiver->close();
+ }
}
void
@@ -699,7 +713,7 @@ IceInternal::Connection::setState(State state)
{
return;
}
- _threadPool->unregister(_transceiver->fd(), false);
+ _threadPool->unregister(_transceiver->fd());
break;
}
@@ -730,7 +744,7 @@ IceInternal::Connection::setState(State state)
//
_threadPool->_register(_transceiver->fd(), this);
}
- _threadPool->unregister(_transceiver->fd(), true);
+ _threadPool->unregister(_transceiver->fd());
break;
}
}