From 2333a38cd7c27c6c09ae4c0c33d269b9ba11b9ba Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Sat, 17 Aug 2013 07:44:22 -0700 Subject: [PATCH] Fix thread destruction in TestPeer and better exception reporting --- .../beast_asio/tests/beast_PeerTest.cpp | 7 +++++++ .../modules/beast_asio/tests/beast_PeerTest.h | 21 +++++++++++++++++++ .../beast_asio/tests/beast_TestPeerType.h | 6 ++++++ 3 files changed, 34 insertions(+) diff --git a/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.cpp b/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.cpp index 38b0ac717e..45b2db7377 100644 --- a/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.cpp +++ b/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.cpp @@ -30,6 +30,13 @@ PeerTest::Result::Result (boost::system::error_code const& ec, String const& pre { } +PeerTest::Result::Result (std::exception const& e, String const& prefix) + : m_ec (TestPeerBasics::make_error (TestPeerBasics::errc::exceptioned)) + , m_message ((prefix == String::empty) ? e.what () + : prefix + ": " + e.what ()) +{ +} + bool PeerTest::Result::operator== (Result const& other) const noexcept { return m_ec == other.m_ec; diff --git a/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.h b/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.h index c411858636..e47f29e33c 100644 --- a/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.h +++ b/Subtrees/beast/modules/beast_asio/tests/beast_PeerTest.h @@ -49,6 +49,7 @@ public: The prefix is prepended to the error message. */ explicit Result (boost::system::error_code const& ec, String const& prefix = ""); + explicit Result (std::exception const& e, String const& prefix = ""); /** Returns true if the error codes match (message is ignored). */ @@ -143,30 +144,50 @@ public: results.server = Result (ec, server.name ()); } + catch (std::exception& e) + { + results.server = Result (e, server.name ()); + } catch (...) { results.server = Result (TestPeerBasics::make_error ( TestPeerBasics::errc::exceptioned), server.name ()); } } + catch (std::exception& e) + { + results.server = Result (e, client.name ()); + } catch (...) { results.client = Result (TestPeerBasics::make_error ( TestPeerBasics::errc::exceptioned), client.name ()); } } + catch (std::exception& e) + { + results.server = Result (e, server.name ()); + } catch (...) { results.server = Result (TestPeerBasics::make_error ( TestPeerBasics::errc::exceptioned), server.name ()); } } + catch (std::exception& e) + { + results.server = Result (e, "client"); + } catch (...) { results.client = Result (TestPeerBasics::make_error ( TestPeerBasics::errc::exceptioned), "client"); } } + catch (std::exception& e) + { + results.server = Result (e, "server"); + } catch (...) { results.server = Result (TestPeerBasics::make_error ( diff --git a/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerType.h b/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerType.h index 729a7405ff..559eaca343 100644 --- a/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerType.h +++ b/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerType.h @@ -162,12 +162,18 @@ public: error () = make_error (errc::timeout); } + else + { + stopThread (); + } } else { // They requested an infinite wait. // m_join.wait (); + + stopThread (); } }