diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-0.26.2/goo/GooMutex.h')
-rw-r--r-- | Build/source/libs/poppler/poppler-0.26.2/goo/GooMutex.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Build/source/libs/poppler/poppler-0.26.2/goo/GooMutex.h b/Build/source/libs/poppler/poppler-0.26.2/goo/GooMutex.h new file mode 100644 index 00000000000..b2714b048c7 --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.26.2/goo/GooMutex.h @@ -0,0 +1,85 @@ +//======================================================================== +// +// GooMutex.h +// +// Portable mutex macros. +// +// Copyright 2002-2003 Glyph & Cog, LLC +// +//======================================================================== + +//======================================================================== +// +// Modified under the Poppler project - http://poppler.freedesktop.org +// +// All changes made under the Poppler project to this file are licensed +// under GPL version 2 or later +// +// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net> +// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> +// Copyright (C) 2013 Albert Astals Cid <aacid@kde.org> +// Copyright (C) 2013 Adam Reichold <adamreichold@myopera.com> +// Copyright (C) 2014 Bogdan Cristea <cristeab@gmail.com> +// Copyright (C) 2014 Peter Breitenlohner <peb@mppmu.mpg.de> +// +// To see a description of the changes please see the Changelog file that +// came with your tarball or type make ChangeLog if you are building from git +// +//======================================================================== + +#ifndef GMUTEX_H +#define GMUTEX_H + +// Usage: +// +// GooMutex m; +// gInitMutex(&m); +// ... +// gLockMutex(&m); +// ... critical section ... +// gUnlockMutex(&m); +// ... +// gDestroyMutex(&m); + +#ifdef _WIN32 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include <windows.h> + +typedef CRITICAL_SECTION GooMutex; + +#define gInitMutex(m) InitializeCriticalSection(m) +#define gDestroyMutex(m) DeleteCriticalSection(m) +#define gLockMutex(m) EnterCriticalSection(m) +#define gUnlockMutex(m) LeaveCriticalSection(m) + +#else // assume pthreads + +#include <pthread.h> + +typedef pthread_mutex_t GooMutex; + +inline void gInitMutex(GooMutex *m) { + pthread_mutexattr_t mutexattr; + pthread_mutexattr_init(&mutexattr); + pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(m, &mutexattr); + pthread_mutexattr_destroy(&mutexattr); +} +#define gDestroyMutex(m) pthread_mutex_destroy(m) +#define gLockMutex(m) pthread_mutex_lock(m) +#define gUnlockMutex(m) pthread_mutex_unlock(m) + +#endif + +class MutexLocker { +public: + MutexLocker(GooMutex *mutexA) : mutex(mutexA) { gLockMutex(mutex); } + ~MutexLocker() { gUnlockMutex(mutex); } + +private: + GooMutex *mutex; +}; + +#endif |