X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fthread.hpp;h=640cb66a06e2f3aac0c6e4ed750ab8b8e21fb356;hb=6139acf5af6c33a6ca858306e7abd97e0ee4104f;hp=25fc09939f2b09909c4c800e94b3fdfbfe1c266a;hpb=17690735658d7b44f91579df91e31da9ae185158;p=awesomized%2Flibmemcached diff --git a/libtest/thread.hpp b/libtest/thread.hpp index 25fc0993..640cb66a 100644 --- a/libtest/thread.hpp +++ b/libtest/thread.hpp @@ -38,6 +38,10 @@ #include +#if __cplusplus < 201103L +# define noexcept(a) +#endif + namespace libtest { namespace thread @@ -46,30 +50,32 @@ namespace thread class Mutex { public: - Mutex() + Mutex() : + _err(0) { - int err; - if ((err= pthread_mutex_init(&_mutex, NULL))) - { - throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "pthread_mutex_init: %s", strerror(err)); - } + _err= pthread_mutex_init(&_mutex, NULL); } - ~Mutex() + ~Mutex() noexcept(false) { - int err; - if ((err= pthread_mutex_destroy(&_mutex))) + if ((_err= pthread_mutex_destroy(&_mutex))) { - throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "pthread_cond_destroy: %s", strerror(err)); + throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "pthread_cond_destroy: %s", strerror(_err)); } } pthread_mutex_t* handle() { + if (_err != 0) + { + throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "pthread_mutex_init: %s", strerror(_err)); + } + return &_mutex; } private: + int _err; pthread_mutex_t _mutex; }; @@ -82,7 +88,7 @@ public: init(); } - ~ScopedLock() + ~ScopedLock() noexcept(false) { int err; if ((err= pthread_mutex_unlock(_mutex.handle()))) @@ -122,7 +128,7 @@ public: } } - ~Condition() + ~Condition() noexcept(false) { int err; if ((err= pthread_cond_destroy(&_cond)))