summaryrefslogtreecommitdiff
path: root/src/threadengine.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-10-01 21:01:49 -0400
committerAdam <Adam@anope.org>2010-10-01 21:01:49 -0400
commitd44f7971b129aa7ba80999f16f17b8c7499686e1 (patch)
treea86d08c3e641ed6b499b53b3bbb74e2a7f5b0dfb /src/threadengine.cpp
parent70056dd4689eeab4f7a9b31a921e0d7e40d5ed0d (diff)
Rewrote some of the socket code to allow m_ssl to be a service.
This allows modules (xmlrpc) to create and accept SSL connections. Also fixed unloading m_mysql at certain times and made the threading engine always work correctly on Windows.
Diffstat (limited to 'src/threadengine.cpp')
-rw-r--r--src/threadengine.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/threadengine.cpp b/src/threadengine.cpp
index 36a73d324..0ac049c38 100644
--- a/src/threadengine.cpp
+++ b/src/threadengine.cpp
@@ -2,16 +2,39 @@
ThreadEngine threadEngine;
+/** Check for finished threads
+ */
+void ThreadEngine::Process()
+{
+ for (unsigned i = this->threads.size(); i > 0; --i)
+ {
+ Thread *t = this->threads[i - 1];
+
+ if (t->GetExitState())
+ {
+ t->Join();
+ delete t;
+ }
+ }
+}
+
/** Threads constructor
*/
Thread::Thread() : Exit(false)
{
+ threadEngine.threads.push_back(this);
}
/** Threads destructor
*/
Thread::~Thread()
{
+ std::vector<Thread *>::iterator it = std::find(threadEngine.threads.begin(), threadEngine.threads.end(), this);
+
+ if (it != threadEngine.threads.end())
+ {
+ threadEngine.threads.erase(it);
+ }
}
/** Sets the exit state as true informing the thread we want it to shut down