summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ReapThread.cpp
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2006-09-04 01:14:49 +0000
committerMatthew Newhook <matthew@zeroc.com>2006-09-04 01:14:49 +0000
commit25aff3e218350ea323a55ca7fa4247d9da61aac7 (patch)
tree2f04fb173eacceb007dda8696414c1d370f4c442 /cpp/src/IceGrid/ReapThread.cpp
parentfixing a bug with generated #include statements (diff)
downloadice-25aff3e218350ea323a55ca7fa4247d9da61aac7.tar.bz2
ice-25aff3e218350ea323a55ca7fa4247d9da61aac7.tar.xz
ice-25aff3e218350ea323a55ca7fa4247d9da61aac7.zip
http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=1331
Diffstat (limited to 'cpp/src/IceGrid/ReapThread.cpp')
-rw-r--r--cpp/src/IceGrid/ReapThread.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/cpp/src/IceGrid/ReapThread.cpp b/cpp/src/IceGrid/ReapThread.cpp
index bdda6941c7b..e8ee202ac61 100644
--- a/cpp/src/IceGrid/ReapThread.cpp
+++ b/cpp/src/IceGrid/ReapThread.cpp
@@ -22,7 +22,7 @@ ReapThread::ReapThread(int timeout) :
void
ReapThread::run()
{
- vector<ReapablePtr> reap;
+ vector<ReapableItem> reap;
while(true)
{
{
@@ -34,12 +34,12 @@ ReapThread::run()
break;
}
- list<ReapablePtr>::iterator p = _sessions.begin();
+ list<ReapableItem>::iterator p = _sessions.begin();
while(p != _sessions.end())
{
try
{
- if((IceUtil::Time::now() - (*p)->timestamp()) > _timeout)
+ if((IceUtil::Time::now() - p->item->timestamp()) > p->timeout)
{
reap.push_back(*p);
p = _sessions.erase(p);
@@ -56,9 +56,9 @@ ReapThread::run()
}
}
- for(vector<ReapablePtr>::const_iterator p = reap.begin(); p != reap.end(); ++p)
+ for(vector<ReapableItem>::const_iterator p = reap.begin(); p != reap.end(); ++p)
{
- (*p)->destroy(false);
+ p->item->destroy(false);
}
reap.clear();
}
@@ -67,7 +67,7 @@ ReapThread::run()
void
ReapThread::terminate()
{
- list<ReapablePtr> reap;
+ list<ReapableItem> reap;
{
Lock sync(*this);
if(_terminated)
@@ -79,9 +79,9 @@ ReapThread::terminate()
reap.swap(_sessions);
}
- for(list<ReapablePtr>::const_iterator p = reap.begin(); p != reap.end(); ++p)
+ for(list<ReapableItem>::const_iterator p = reap.begin(); p != reap.end(); ++p)
{
- (*p)->destroy(true);
+ p->item->destroy(true);
}
}
@@ -93,6 +93,24 @@ ReapThread::add(const ReapablePtr& reapable)
{
return;
}
- _sessions.push_back(reapable);
+ ReapableItem item;
+ item.item = reapable;
+ item.timeout = _timeout;
+ _sessions.push_back(item);
+}
+
+void
+ReapThread::add(const ReapablePtr& reapable, int timeout)
+{
+ Lock sync(*this);
+ if(_terminated)
+ {
+ return;
+ }
+
+ ReapableItem item;
+ item.item = reapable;
+ item.timeout = IceUtil::Time::seconds(timeout);
+ _sessions.push_back(item);
}