diff options
Diffstat (limited to 'src/shared/Mthread.cpp')
| -rw-r--r-- | src/shared/Mthread.cpp | 206 | 
1 files changed, 0 insertions, 206 deletions
diff --git a/src/shared/Mthread.cpp b/src/shared/Mthread.cpp deleted file mode 100644 index fbbeeb5a620..00000000000 --- a/src/shared/Mthread.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* -    Cross-platform thread handling -    Copyright (C) 2005 Andrew Zabolotny - -    This library is free software; you can redistribute it and/or -    modify it under the terms of the GNU Library General Public -    License as published by the Free Software Foundation; either -    version 2 of the License, or (at your option) any later version. - -    This library 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 GNU -    Library General Public License for more details. - -    You should have received a copy of the GNU Library General Public -    License along with this library; if not, write to the Free -    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "Mthread.h" - -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE_CC__) -#  define TRINITY_PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE -#else -#  define TRINITY_PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP -#endif - -#if PLATFORM != PLATFORM_WINDOWS - -MThread::MThread () -{ -    tid = 0; -} - -MThread::~MThread () -{ -    /* Kill thread if this is not the current thread */ -    if (tid && (pthread_self () != tid)) -    { -        pthread_cancel (tid); -        pthread_join (tid, NULL); -    } -} - -static void *thread_start_routine (void *arg) -{ -    MThread *newthr = (MThread *)arg; -    pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL); -    newthr->routine (newthr->arg); -    return NULL; -} - -MThread *MThread::Start (void (*routine) (void *arg), void *arg) -{ -    MThread *newthr = new MThread (); -    newthr->routine = routine; -    newthr->arg = arg; -    int rc = pthread_create (&newthr->tid, NULL, thread_start_routine, newthr); -    if (rc) -    { -        newthr->DecRef (); -        return NULL; -    } - -    return newthr; -} - -pthread_mutexattr_t MMutex::attr; -int MMutex::attr_refcount = 0; - -MMutex::MMutex () -{ -    if (!attr_refcount++) -    { -        pthread_mutexattr_init (&attr); -        pthread_mutexattr_settype (&attr, TRINITY_PTHREAD_MUTEX_RECURSIVE); -    } - -    pthread_mutex_init (&mutex, &attr); -} - -MMutex::~MMutex () -{ -    pthread_mutex_destroy (&mutex); -    if (!--attr_refcount) -        pthread_mutexattr_destroy (&attr); -} - -bool MMutex::Lock () -{ -    return (pthread_mutex_lock (&mutex) == 0); -} - -bool MMutex::TryLock () -{ -    return (pthread_mutex_trylock (&mutex) == 0); -} - -void MMutex::Unlock () -{ -    pthread_mutex_unlock (&mutex); -} - -MMutex *MMutex::Create () -{ -    return new MMutex (); -} - -#else                                                       //windows - -MThread::MThread() -{ -    th = NULL; -} - -MThread::~MThread () -{ -    /* Kill thread if this is not current thread */ -    if (th && (GetCurrentThreadId () != id)) -    { -        TerminateThread (th, 0); -        WaitForSingleObject (th, INFINITE); -        CloseHandle (th); -    } -} - -bool MThread::SetPriority (ThreadPriority prio) -{ -    int p; -    switch (prio) -    { -        case IDLE:      p = THREAD_PRIORITY_IDLE; break; -        case LOWER:     p = THREAD_PRIORITY_LOWEST; break; -        case LOW:       p = THREAD_PRIORITY_BELOW_NORMAL; break; -        case NORMAL:    p = THREAD_PRIORITY_NORMAL; break; -        case HIGH:      p = THREAD_PRIORITY_ABOVE_NORMAL; break; -        case HIGHER:    p = THREAD_PRIORITY_HIGHEST; break; -        case REALTIME:  p = THREAD_PRIORITY_TIME_CRITICAL; break; -        default:        p = THREAD_PRIORITY_NORMAL; break; -    } -    return SetThreadPriority (th, p); -} - -static DWORD WINAPI thread_start_routine (void *arg) -//static void thread_start_routine (void *arg) -{ -    MThread *newthr = (MThread *)arg; -    newthr->id = GetCurrentThreadId (); -    newthr->routine (newthr->arg); -    return 0; -} - -MThread *MThread::Start (void (*routine) (void *arg), void *arg) -{ -    DWORD dwtid; -    MThread *newthr = new MThread (); -    newthr->routine = routine; -    newthr->arg = arg; -    newthr->th = CreateThread (NULL, WIN32_THREAD_STACK_SIZE, thread_start_routine, newthr, 0, &dwtid); -    //newthr->th = (HANDLE)_beginthread(thread_start_routine, 0, newthr); -    if (!newthr->th) -    { -        newthr->DecRef (); -        return NULL; -    } -    return newthr; -} - -MMutex::MMutex () -{ -    sem = CreateMutex (NULL, FALSE, NULL); -} - -MMutex::~MMutex () -{ -    CloseHandle (sem); -} - -bool MMutex::Lock () -{ -    return (WaitForSingleObject (sem, INFINITE) != WAIT_FAILED); -} - -bool MMutex::TryLock () -{ -    DWORD state = WaitForSingleObject (sem, 0); -    return (state == WAIT_OBJECT_0) && (state != WAIT_ABANDONED); -} - -void MMutex::Unlock () -{ -    ReleaseMutex (sem); -} - -MMutex *MMutex::Create () -{ -    MMutex *mutex = new MMutex (); -    if (!mutex->sem) -    { -        mutex->DecRef (); -        return NULL; -    } -    return mutex; -} -#endif -  | 
