diff options
| author | Adam <Adam@anope.org> | 2010-10-01 21:01:49 -0400 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2010-10-01 21:01:49 -0400 |
| commit | d44f7971b129aa7ba80999f16f17b8c7499686e1 (patch) | |
| tree | a86d08c3e641ed6b499b53b3bbb74e2a7f5b0dfb /src/threadengines | |
| parent | 70056dd4689eeab4f7a9b31a921e0d7e40d5ed0d (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/threadengines')
| -rw-r--r-- | src/threadengines/threadengine_pthread.cpp | 8 | ||||
| -rw-r--r-- | src/threadengines/threadengine_win32.cpp | 6 |
2 files changed, 6 insertions, 8 deletions
diff --git a/src/threadengines/threadengine_pthread.cpp b/src/threadengines/threadengine_pthread.cpp index fb0b29506..65d1533f3 100644 --- a/src/threadengines/threadengine_pthread.cpp +++ b/src/threadengines/threadengine_pthread.cpp @@ -10,9 +10,7 @@ static void *entry_point(void *parameter) { Thread *thread = static_cast<Thread *>(parameter); thread->Run(); - if (!thread->GetExitState()) - thread->Join(); - delete thread; + thread->SetExitState(); pthread_exit(0); } @@ -22,6 +20,8 @@ ThreadEngine::ThreadEngine() { if (pthread_attr_init(&threadengine_attr)) throw CoreException("ThreadEngine: Error calling pthread_attr_init"); + if (pthread_attr_setdetachstate(&threadengine_attr, PTHREAD_CREATE_JOINABLE)) + throw CoreException("ThreadEngine: Unable to mark threads as joinable"); } /** Threadengines destructor @@ -35,7 +35,7 @@ ThreadEngine::~ThreadEngine() */ void Thread::Join() { - SetExitState(); + this->SetExitState(); pthread_join(Handle, NULL); } diff --git a/src/threadengines/threadengine_win32.cpp b/src/threadengines/threadengine_win32.cpp index b67f01681..8fb103267 100644 --- a/src/threadengines/threadengine_win32.cpp +++ b/src/threadengines/threadengine_win32.cpp @@ -7,9 +7,7 @@ static DWORD WINAPI entry_point(void *parameter) { Thread *thread = static_cast<Thread *>(parameter); thread->Run(); - if (!thread->GetExitState()) - thread->Join(); - delete thread; + thread->SetExitState(); return 0; } @@ -29,7 +27,7 @@ ThreadEngine::~ThreadEngine() */ void Thread::Join() { - SetExitState(); + this->SetExitState(); WaitForSingleObject(Handle, INFINITE); } |
