|
@@ -1,4 +1,5 @@
|
|
|
#include <LibThread/Thread.h>
|
|
|
+#include <pthread.h>
|
|
|
#include <unistd.h>
|
|
|
|
|
|
LibThread::Thread::Thread(Function<int()> action)
|
|
@@ -17,17 +18,20 @@ LibThread::Thread::~Thread()
|
|
|
|
|
|
void LibThread::Thread::start()
|
|
|
{
|
|
|
- int rc = create_thread([](void* arg) {
|
|
|
- Thread* self = static_cast<Thread*>(arg);
|
|
|
- int exit_code = self->m_action();
|
|
|
- self->m_tid = -1;
|
|
|
- exit_thread(exit_code);
|
|
|
- return exit_code;
|
|
|
- }, static_cast<void*>(this));
|
|
|
+ int rc = pthread_create(
|
|
|
+ &m_tid,
|
|
|
+ nullptr,
|
|
|
+ [](void* arg) -> void* {
|
|
|
+ Thread* self = static_cast<Thread*>(arg);
|
|
|
+ int exit_code = self->m_action();
|
|
|
+ self->m_tid = -1;
|
|
|
+ pthread_exit((void*)exit_code);
|
|
|
+ return (void*)exit_code;
|
|
|
+ },
|
|
|
+ static_cast<void*>(this));
|
|
|
|
|
|
- ASSERT(rc > 0);
|
|
|
- dbg() << "Started a thread, tid = " << rc;
|
|
|
- m_tid = rc;
|
|
|
+ ASSERT(rc == 0);
|
|
|
+ dbg() << "Started a thread, tid = " << m_tid;
|
|
|
}
|
|
|
|
|
|
void LibThread::Thread::quit(int code)
|
|
@@ -35,5 +39,5 @@ void LibThread::Thread::quit(int code)
|
|
|
ASSERT(m_tid == gettid());
|
|
|
|
|
|
m_tid = -1;
|
|
|
- exit_thread(code);
|
|
|
+ pthread_exit((void*)code);
|
|
|
}
|