]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | ////////////////////////////////////////////////////////////////////////////// |
2 | // | |
3 | // (C) Copyright Ion Gaztanaga 2005-2015. Distributed under the Boost | |
4 | // Software License, Version 1.0. (See accompanying file | |
5 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
6 | // | |
7 | // See http://www.boost.org/libs/interprocess for documentation. | |
8 | // | |
9 | ////////////////////////////////////////////////////////////////////////////// | |
10 | ||
11 | #ifndef BOOST_INTERPROCESS_EXCEPTIONS_HPP | |
12 | #define BOOST_INTERPROCESS_EXCEPTIONS_HPP | |
13 | ||
14 | #ifndef BOOST_CONFIG_HPP | |
15 | # include <boost/config.hpp> | |
16 | #endif | |
17 | # | |
18 | #if defined(BOOST_HAS_PRAGMA_ONCE) | |
19 | # pragma once | |
20 | #endif | |
21 | ||
22 | #include <boost/interprocess/detail/config_begin.hpp> | |
23 | #include <boost/interprocess/detail/workaround.hpp> | |
24 | #include <boost/interprocess/errors.hpp> | |
25 | #include <stdexcept> | |
26 | ||
27 | //!\file | |
28 | //!Describes exceptions thrown by interprocess classes | |
29 | ||
30 | namespace boost { | |
31 | ||
32 | namespace interprocess { | |
33 | ||
34 | //!This class is the base class of all exceptions | |
35 | //!thrown by boost::interprocess | |
36 | class BOOST_SYMBOL_VISIBLE interprocess_exception : public std::exception | |
37 | { | |
38 | public: | |
39 | interprocess_exception(const char *err) | |
40 | : m_err(other_error) | |
41 | { | |
42 | try { m_str = err; } | |
43 | catch (...) {} | |
44 | } | |
45 | ||
46 | interprocess_exception(const error_info &err_info, const char *str = 0) | |
47 | : m_err(err_info) | |
48 | { | |
49 | try{ | |
50 | if(m_err.get_native_error() != 0){ | |
51 | fill_system_message(m_err.get_native_error(), m_str); | |
52 | } | |
53 | else if(str){ | |
54 | m_str = str; | |
55 | } | |
56 | else{ | |
57 | m_str = "boost::interprocess_exception::library_error"; | |
58 | } | |
59 | } | |
60 | catch(...){} | |
61 | } | |
62 | ||
63 | virtual ~interprocess_exception() throw(){} | |
64 | ||
65 | virtual const char * what() const throw() | |
66 | { return m_str.c_str(); } | |
67 | ||
68 | native_error_t get_native_error()const { return m_err.get_native_error(); } | |
69 | ||
70 | // Note: a value of other_error implies a library (rather than system) error | |
71 | error_code_t get_error_code() const { return m_err.get_error_code(); } | |
72 | ||
73 | #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED) | |
74 | private: | |
75 | error_info m_err; | |
76 | std::string m_str; | |
77 | #endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED | |
78 | }; | |
79 | ||
80 | //!This is the exception thrown by shared interprocess_mutex family when a deadlock situation | |
81 | //!is detected or when using a interprocess_condition the interprocess_mutex is not locked | |
82 | class BOOST_SYMBOL_VISIBLE lock_exception : public interprocess_exception | |
83 | { | |
84 | public: | |
85 | lock_exception() | |
86 | : interprocess_exception(lock_error) | |
87 | {} | |
88 | ||
89 | virtual const char* what() const throw() | |
90 | { return "boost::interprocess::lock_exception"; } | |
91 | }; | |
92 | ||
93 | ||
94 | //!This exception is thrown when a memory request can't be | |
95 | //!fulfilled. | |
96 | class BOOST_SYMBOL_VISIBLE bad_alloc : public interprocess_exception | |
97 | { | |
98 | public: | |
99 | bad_alloc() : interprocess_exception("::boost::interprocess::bad_alloc"){} | |
100 | virtual const char* what() const throw() | |
101 | { return "boost::interprocess::bad_alloc"; } | |
102 | }; | |
103 | ||
104 | } // namespace interprocess { | |
105 | ||
106 | } // namespace boost | |
107 | ||
108 | #include <boost/interprocess/detail/config_end.hpp> | |
109 | ||
110 | #endif // BOOST_INTERPROCESS_EXCEPTIONS_HPP |