diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /libs/interprocess/test/named_mutex_test.cpp | |
download | boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2 boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip |
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'libs/interprocess/test/named_mutex_test.cpp')
-rw-r--r-- | libs/interprocess/test/named_mutex_test.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/libs/interprocess/test/named_mutex_test.cpp b/libs/interprocess/test/named_mutex_test.cpp new file mode 100644 index 0000000000..e4d1612035 --- /dev/null +++ b/libs/interprocess/test/named_mutex_test.cpp @@ -0,0 +1,99 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2004-2011. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#include <boost/interprocess/detail/config_begin.hpp> +#include <boost/interprocess/sync/named_mutex.hpp> +#include <boost/interprocess/sync/scoped_lock.hpp> +#include "mutex_test_template.hpp" +#include "named_creation_template.hpp" +#include <string> +#include "get_process_id_name.hpp" +#include <boost/interprocess/detail/interprocess_tester.hpp> + +using namespace boost::interprocess; + +struct mutex_deleter +{ + ~mutex_deleter() + { named_mutex::remove(test::get_process_id_name()); } +}; + +//This wrapper is necessary to have a default constructor +//in generic mutex_test_template functions +class named_mutex_lock_test_wrapper + : public named_mutex +{ + public: + named_mutex_lock_test_wrapper() + : named_mutex(open_or_create, test::get_process_id_name()) + { ++count_; } + + ~named_mutex_lock_test_wrapper() + { + if(--count_){ + ipcdetail::interprocess_tester:: + dont_close_on_destruction(static_cast<named_mutex&>(*this)); + } + } + + static int count_; +}; + +int named_mutex_lock_test_wrapper::count_ = 0; + +//This wrapper is necessary to have a common constructor +//in generic named_creation_template functions +class named_mutex_creation_test_wrapper + : public mutex_deleter, public named_mutex +{ + public: + named_mutex_creation_test_wrapper(create_only_t) + : named_mutex(create_only, test::get_process_id_name()) + { ++count_; } + + named_mutex_creation_test_wrapper(open_only_t) + : named_mutex(open_only, test::get_process_id_name()) + { ++count_; } + + named_mutex_creation_test_wrapper(open_or_create_t) + : named_mutex(open_or_create, test::get_process_id_name()) + { ++count_; } + + ~named_mutex_creation_test_wrapper() + { + if(--count_){ + ipcdetail::interprocess_tester:: + dont_close_on_destruction(static_cast<named_mutex&>(*this)); + } + } + + static int count_; +}; + +int named_mutex_creation_test_wrapper::count_ = 0; + +int main () +{ + try{ + named_mutex::remove(test::get_process_id_name()); + test::test_named_creation<named_mutex_creation_test_wrapper>(); + test::test_all_lock<named_mutex_lock_test_wrapper>(); + test::test_all_mutex<false, named_mutex_lock_test_wrapper>(); + } + catch(std::exception &ex){ + named_mutex::remove(test::get_process_id_name()); + std::cout << ex.what() << std::endl; + return 1; + } + named_mutex::remove(test::get_process_id_name()); + return 0; +} + +#include <boost/interprocess/detail/config_end.hpp> |