aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/arch/unix/ArchMultithreadPosix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/arch/unix/ArchMultithreadPosix.cpp')
-rw-r--r--src/lib/arch/unix/ArchMultithreadPosix.cpp35
1 files changed, 8 insertions, 27 deletions
diff --git a/src/lib/arch/unix/ArchMultithreadPosix.cpp b/src/lib/arch/unix/ArchMultithreadPosix.cpp
index 4866edc..8400f9d 100644
--- a/src/lib/arch/unix/ArchMultithreadPosix.cpp
+++ b/src/lib/arch/unix/ArchMultithreadPosix.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file LICENSE that should have accompanied this file.
- *
+ *
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@@ -59,24 +59,19 @@ public:
int m_refCount;
IArchMultithread::ThreadID m_id;
pthread_t m_thread;
- IArchMultithread::ThreadFunc m_func;
- void* m_userData;
+ std::function<void()> func_;;
bool m_cancel;
bool m_cancelling;
bool m_exited;
- void* m_result;
void* m_networkData;
};
ArchThreadImpl::ArchThreadImpl() :
m_refCount(1),
m_id(0),
- m_func(NULL),
- m_userData(NULL),
m_cancel(false),
m_cancelling(false),
m_exited(false),
- m_result(NULL),
m_networkData(NULL)
{
// do nothing
@@ -319,11 +314,8 @@ ArchMultithreadPosix::unlockMutex(ArchMutex mutex)
}
}
-ArchThread
-ArchMultithreadPosix::newThread(ThreadFunc func, void* data)
+ArchThread ArchMultithreadPosix::newThread(const std::function<void()>& func)
{
- assert(func != NULL);
-
// initialize signal handler. we do this here instead of the
// constructor so we can avoid daemonizing (using fork())
// when there are multiple threads. clients can safely
@@ -341,8 +333,7 @@ ArchMultithreadPosix::newThread(ThreadFunc func, void* data)
// create thread impl for new thread
ArchThreadImpl* thread = new ArchThreadImpl;
- thread->m_func = func;
- thread->m_userData = data;
+ thread->func_ = func;
// create the thread. pthread_create() on RedHat 7.2 smp fails
// if passed a NULL attr so use a default attr.
@@ -389,7 +380,7 @@ ArchMultithreadPosix::closeThread(ArchThread thread)
// decrement ref count and clean up thread if no more references
if (--thread->m_refCount == 0) {
// detach from thread (unless it's the main thread)
- if (thread->m_func != NULL) {
+ if (thread->func_) {
pthread_detach(thread->m_thread);
}
@@ -526,13 +517,6 @@ ArchMultithreadPosix::isExitedThread(ArchThread thread)
return thread->m_exited;
}
-void*
-ArchMultithreadPosix::getResultOfThread(ArchThread thread)
-{
- std::lock_guard<std::mutex> lock(m_threadMutex);
- return thread->m_result;
-}
-
IArchMultithread::ThreadID
ArchMultithreadPosix::getIDOfThread(ArchThread thread)
{
@@ -549,7 +533,7 @@ ArchMultithreadPosix::setSignalHandler(
}
void
-ArchMultithreadPosix::raiseSignal(ESignal signal)
+ArchMultithreadPosix::raiseSignal(ESignal signal)
{
std::lock_guard<std::mutex> lock(m_threadMutex);
if (m_signalFunc[signal] != NULL) {
@@ -699,10 +683,8 @@ ArchMultithreadPosix::doThreadFunc(ArchThread thread)
std::lock_guard<std::mutex> lock(m_threadMutex);
}
- void* result = NULL;
try {
- // go
- result = (*thread->m_func)(thread->m_userData);
+ thread->func_();
}
catch (XThreadCancel&) {
@@ -721,7 +703,6 @@ ArchMultithreadPosix::doThreadFunc(ArchThread thread)
// thread has exited
{
std::lock_guard<std::mutex> lock(m_threadMutex);
- thread->m_result = result;
thread->m_exited = true;
}