00001
00002
00003
00004
00005
00006
00007 #ifndef INCLUDED_LINUXRECURSIVEPOSIXMUTEXSPECIALIZATION_H
00008 #define INCLUDED_LINUXRECURSIVEPOSIXMUTEXSPECIALIZATION_H
00009
00010 #ifdef HAVE_CONFIG_H
00011 #include "../config.h"
00012 #endif
00013
00014 #ifdef HAVE_PTHREAD_MUTEXATTR_SETTYPE
00015 #ifdef HAVE_PTHREAD_MUTEX_RECURSIVE_NP
00016
00017 #ifndef INCLUDED_ERRNO_H
00018 #include "../Exceptions/Errno.hh"
00019 #endif
00020
00021 #include <pthread.h>
00022
00023 namespace fatalmind {
00024
00025 class LinuxRecursivePosixMutexSpecialization {
00026 public:
00027 inline void recursive_ok() {
00028 }
00029
00030 protected:
00031 LinuxRecursivePosixMutexSpecialization() {
00032 Errno::ThrowOnError(
00033 pthread_mutexattr_init(&d_mutexattr)
00034 );
00035 Errno::ThrowOnError(
00036 pthread_mutexattr_settype(&d_mutexattr
00037 , PTHREAD_MUTEX_RECURSIVE_NP
00038 )
00039 );
00040 }
00041
00042 inline pthread_mutexattr_t* getAttr() {
00043 return &d_mutexattr;
00044 }
00045
00046 ~LinuxRecursivePosixMutexSpecialization() {
00047 pthread_mutexattr_destroy(&d_mutexattr);
00048 }
00049 protected:
00050 pthread_mutexattr_t d_mutexattr;
00051 };
00052
00053 }
00054
00055 #endif // HAVE_HAVE_PTHREAD_MUTEX_RECURSIVE_NP
00056 #endif // HAVE_PTHREAD_MUTEXATTR_SETTYPE
00057
00058 #endif