1.1 --- a/core/logic/thread/PosixThreads.h Mon Aug 19 12:59:10 2013 -0700
1.2 +++ b/core/logic/thread/PosixThreads.h Mon Aug 19 20:58:02 2013 -0700
1.3 @@ -1,5 +1,5 @@
1.4 /**
1.5 - * vim: set ts=4 :
1.6 + * vim: set ts=4 sw=4 tw=99 noet:
1.7 * =============================================================================
1.8 * SourceMod
1.9 * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
1.10 @@ -33,19 +33,17 @@
1.11 #define _INCLUDE_POSIXTHREADS_H_
1.12
1.13 #include <pthread.h>
1.14 +#include <ke_thread_utils.h>
1.15 #include "IThreader.h"
1.16
1.17 using namespace SourceMod;
1.18
1.19 -void *Posix_ThreadGate(void *param);
1.20 -
1.21 class PosixThreader : public IThreader
1.22 {
1.23 public:
1.24 - class ThreadHandle : public IThreadHandle
1.25 + class ThreadHandle : public IThreadHandle, public ke::IRunnable
1.26 {
1.27 friend class PosixThreader;
1.28 - friend void *Posix_ThreadGate(void *param);
1.29 public:
1.30 ThreadHandle(IThreader *parent, IThread *run, const ThreadParams *params);
1.31 virtual ~ThreadHandle();
1.32 @@ -58,43 +56,16 @@
1.33 virtual bool SetPriority(ThreadPriority prio);
1.34 virtual ThreadState GetState();
1.35 virtual bool Unpause();
1.36 + public:
1.37 + void Run();
1.38 protected:
1.39 IThreader *m_parent; //Parent handle
1.40 - pthread_t m_thread; //Windows HANDLE
1.41 ThreadParams m_params; //Current Parameters
1.42 - IThread *m_run; //Runnable context
1.43 - pthread_mutex_t m_statelock;
1.44 - pthread_mutex_t m_runlock;
1.45 + IThread *m_run; //Runnable context
1.46 + ke::AutoPtr<ke::Thread> m_thread;
1.47 + ke::ConditionVariable m_runlock;
1.48 ThreadState m_state; //internal state
1.49 };
1.50 - class PosixMutex : public IMutex
1.51 - {
1.52 - public:
1.53 - PosixMutex(pthread_mutex_t m) : m_mutex(m)
1.54 - {
1.55 - };
1.56 - virtual ~PosixMutex();
1.57 - public:
1.58 - virtual bool TryLock();
1.59 - virtual void Lock();
1.60 - virtual void Unlock();
1.61 - virtual void DestroyThis();
1.62 - protected:
1.63 - pthread_mutex_t m_mutex;
1.64 - };
1.65 - class PosixEventSignal : public IEventSignal
1.66 - {
1.67 - public:
1.68 - PosixEventSignal();
1.69 - virtual ~PosixEventSignal();
1.70 - public:
1.71 - virtual void Wait();
1.72 - virtual void Signal();
1.73 - virtual void DestroyThis();
1.74 - protected:
1.75 - pthread_cond_t m_cond;
1.76 - pthread_mutex_t m_mutex;
1.77 - };
1.78 public:
1.79 IMutex *MakeMutex();
1.80 void MakeThread(IThread *pThread);