From 69310edc3cf546f03a2c8b2204e6aa42e3490fee Mon Sep 17 00:00:00 2001 From: Christopher Kohlhoff Date: Mon, 20 Aug 2007 14:11:46 +0000 Subject: [PATCH] Fix order of initialisation problem with error categories. [SVN r38786] --- include/boost/asio/error.hpp | 48 ++++++++++++------- .../asio/ssl/detail/openssl_operation.hpp | 2 +- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/include/boost/asio/error.hpp b/include/boost/asio/error.hpp index b4005cfa..324fcc4c 100644 --- a/include/boost/asio/error.hpp +++ b/include/boost/asio/error.hpp @@ -51,7 +51,7 @@ boost::system::native_ecat) # define BOOST_ASIO_MISC_ERROR(e) \ boost::system::error_code(e, \ - boost::asio::detail::error_base::misc_ecat) + boost::asio::detail::error_base::misc_ecat()) # define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_win #else # define BOOST_ASIO_NATIVE_ERROR(e) \ @@ -62,13 +62,13 @@ boost::system::native_ecat) # define BOOST_ASIO_NETDB_ERROR(e) \ boost::system::error_code(e, \ - boost::asio::detail::error_base::netdb_ecat) + boost::asio::detail::error_base::netdb_ecat()) # define BOOST_ASIO_GETADDRINFO_ERROR(e) \ boost::system::error_code(e, \ - boost::asio::detail::error_base::addrinfo_ecat) + boost::asio::detail::error_base::addrinfo_ecat()) # define BOOST_ASIO_MISC_ERROR(e) \ boost::system::error_code(e, \ - boost::asio::detail::error_base::misc_ecat) + boost::asio::detail::error_base::misc_ecat()) # define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_posix #endif @@ -83,25 +83,25 @@ class error_base { public: #if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__) - static boost::system::error_category netdb_ecat; + static boost::system::error_category netdb_ecat(); static int netdb_ed(const boost::system::error_code& ec); static std::string netdb_md(const boost::system::error_code& ec); static boost::system::wstring_t netdb_wmd( const boost::system::error_code& ec); - static boost::system::error_category addrinfo_ecat; + static boost::system::error_category addrinfo_ecat(); static int addrinfo_ed(const boost::system::error_code& ec); static std::string addrinfo_md(const boost::system::error_code& ec); static boost::system::wstring_t addrinfo_wmd( const boost::system::error_code& ec); #endif // !defined(BOOST_WINDOWS) && !defined(__CYGWIN__) - static boost::system::error_category misc_ecat; + static boost::system::error_category misc_ecat(); static int misc_ed(const boost::system::error_code& ec); static std::string misc_md(const boost::system::error_code& ec); static boost::system::wstring_t misc_wmd(const boost::system::error_code& ec); - static boost::system::error_category ssl_ecat; + static boost::system::error_category ssl_ecat(); static int ssl_ed(const boost::system::error_code& ec); static std::string ssl_md(const boost::system::error_code& ec); static boost::system::wstring_t ssl_wmd(const boost::system::error_code& ec); @@ -233,9 +233,13 @@ private: #if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__) template -boost::system::error_category error_base::netdb_ecat( +boost::system::error_category error_base::netdb_ecat() +{ + static boost::system::error_category ecat = boost::system::error_code::new_category(&error_base::netdb_ed, - &error_base::netdb_md, &error_base::netdb_wmd)); + &error_base::netdb_md, &error_base::netdb_wmd); + return ecat; +} template int error_base::netdb_ed(const boost::system::error_code& ec) @@ -273,9 +277,13 @@ boost::system::wstring_t error_base::netdb_wmd( } template -boost::system::error_category error_base::addrinfo_ecat( +boost::system::error_category error_base::addrinfo_ecat() +{ + static boost::system::error_category ecat = boost::system::error_code::new_category(&error_base::addrinfo_ed, - &error_base::addrinfo_md, &error_base::addrinfo_wmd)); + &error_base::addrinfo_md, &error_base::addrinfo_wmd); + return ecat; +} template int error_base::addrinfo_ed(const boost::system::error_code& ec) @@ -307,9 +315,13 @@ boost::system::wstring_t error_base::addrinfo_wmd( #endif // !defined(BOOST_WINDOWS) && !defined(__CYGWIN__) template -boost::system::error_category error_base::misc_ecat( +boost::system::error_category error_base::misc_ecat() +{ + static boost::system::error_category ecat = boost::system::error_code::new_category(&error_base::misc_ed, - &error_base::misc_md, &error_base::misc_wmd)); + &error_base::misc_md, &error_base::misc_wmd); + return ecat; +} template int error_base::misc_ed(const boost::system::error_code& ec) @@ -343,9 +355,13 @@ boost::system::wstring_t error_base::misc_wmd( } template -boost::system::error_category error_base::ssl_ecat( +boost::system::error_category error_base::ssl_ecat() +{ + static boost::system::error_category ecat = boost::system::error_code::new_category(&error_base::ssl_ed, - &error_base::ssl_md, &error_base::ssl_wmd)); + &error_base::ssl_md, &error_base::ssl_wmd); + return ecat; +} template int error_base::ssl_ed(const boost::system::error_code& ec) diff --git a/include/boost/asio/ssl/detail/openssl_operation.hpp b/include/boost/asio/ssl/detail/openssl_operation.hpp index 744f91b1..a637ba3b 100644 --- a/include/boost/asio/ssl/detail/openssl_operation.hpp +++ b/include/boost/asio/ssl/detail/openssl_operation.hpp @@ -180,7 +180,7 @@ public: else { return handler_(boost::system::error_code( - error_code, boost::asio::error::ssl_ecat), rc); + error_code, boost::asio::error::ssl_ecat()), rc); } }