/*
* Ascent MMORPG Server
* Copyright (C) 2005-2007 Ascent Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#include "Common.h"
#include "Mutex.h"
#ifdef WIN32
/* Windows Critical Section Implementation */
Mutex::Mutex() { InitializeCriticalSection(&cs); }
Mutex::~Mutex() { DeleteCriticalSection(&cs); }
#else
/* this is done slightly differently on bsd-variants */
#if defined(__FreeBSD__) || defined(__APPLE_CC__) || defined(__OpenBSD__)
#define recursive_mutex_flag PTHREAD_MUTEX_RECURSIVE
#else
#define recursive_mutex_flag PTHREAD_MUTEX_RECURSIVE_NP
#endif
/* Linux mutex implementation */
bool Mutex::attr_initalized = false;
pthread_mutexattr_t Mutex::attr;
Mutex::Mutex()
{
if(!attr_initalized)
{
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, recursive_mutex_flag);
attr_initalized = true;
}
pthread_mutex_init(&mutex, &attr);
}
Mutex::~Mutex() { pthread_mutex_destroy(&mutex); }
#endif