diff --git a/cmake/RippledInterface.cmake b/cmake/RippledInterface.cmake index 85e2717271..501d982dbf 100644 --- a/cmake/RippledInterface.cmake +++ b/cmake/RippledInterface.cmake @@ -9,6 +9,7 @@ target_compile_definitions (opts BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT BOOST_CONTAINER_FWD_BAD_DEQUE + BOOST_ASIO_ENABLE_HANDLER_TRACKING HAS_UNCAUGHT_EXCEPTIONS=1 $<$: BOOST_ASIO_NO_DEPRECATED diff --git a/include/xrpl/basics/Log.h b/include/xrpl/basics/Log.h index 2506b8ea8d..0f0aa29126 100644 --- a/include/xrpl/basics/Log.h +++ b/include/xrpl/basics/Log.h @@ -157,6 +157,48 @@ private: boost::filesystem::path m_path; }; + class AsioTrackingBuf : public std::streambuf + { + public: + explicit AsioTrackingBuf(beast::Journal j) + { + } + + protected: + int + overflow(int ch) override + { + if (ch == '\n') + { + flush(); + } + else if (ch != EOF) + { + buffer_ += static_cast(ch); + } + return ch; + } + + int + sync() override + { + flush(); + return 0; + } + + private: + void + flush() + { + if (!buffer_.empty()) + { + buffer_.clear(); + } + } + + std::string buffer_; + }; + std::mutex mutable mutex_; std::map< std::string, @@ -166,6 +208,8 @@ private: beast::severities::Severity thresh_; File file_; bool silent_ = false; + std::unique_ptr asioBuf_; + std::unique_ptr asioStream_; public: Logs(beast::severities::Severity level); diff --git a/src/libxrpl/basics/Log.cpp b/src/libxrpl/basics/Log.cpp index 14873a3fd7..42145e0642 100644 --- a/src/libxrpl/basics/Log.cpp +++ b/src/libxrpl/basics/Log.cpp @@ -134,6 +134,9 @@ Logs::File::writeln(char const* text) Logs::Logs(beast::severities::Severity thresh) : thresh_(thresh) // default severity { + asioBuf_ = std::make_unique(journal("AsioTracking")); + asioStream_ = std::make_unique(asioBuf_.get()); + std::clog.rdbuf(asioStream_->rdbuf()); } bool diff --git a/src/xrpld/overlay/detail/PeerImp.cpp b/src/xrpld/overlay/detail/PeerImp.cpp index 372ad9de53..efaf326b79 100644 --- a/src/xrpld/overlay/detail/PeerImp.cpp +++ b/src/xrpld/overlay/detail/PeerImp.cpp @@ -580,8 +580,21 @@ PeerImp::close() { detaching_ = true; // DEPRECATED error_code ec; + timer_.cancel(ec); + if (ec) + { + JLOG(journal_.info()) + << "PeerImp::close timer_.cancel ec: " << ec.message(); + } + socket_.close(ec); + if (ec) + { + JLOG(journal_.info()) + << "PeerImp::close socket_.close ec: " << ec.message(); + } + overlay_.incPeerDisconnect(); if (inbound_) { @@ -601,7 +614,7 @@ PeerImp::fail(std::string const& reason) return post( strand_, std::bind( - (void(Peer::*)(std::string const&)) & PeerImp::fail, + (void (Peer::*)(std::string const&))&PeerImp::fail, shared_from_this(), reason)); if (journal_.active(beast::severities::kWarning) && socket_.is_open()) @@ -672,6 +685,10 @@ PeerImp::cancelTimer() { error_code ec; timer_.cancel(ec); + if (ec) + { + JLOG(journal_.info()) << "PeerImp::cancelTimer ec: " << ec.message(); + } } //------------------------------------------------------------------------------ @@ -1485,8 +1502,9 @@ PeerImp::onMessage(std::shared_ptr const& m) } else { - peer->send(std::make_shared( - reply, protocol::mtPROOF_PATH_RESPONSE)); + peer->send( + std::make_shared( + reply, protocol::mtPROOF_PATH_RESPONSE)); } } }); @@ -1540,8 +1558,9 @@ PeerImp::onMessage(std::shared_ptr const& m) } else { - peer->send(std::make_shared( - reply, protocol::mtREPLAY_DELTA_RESPONSE)); + peer->send( + std::make_shared( + reply, protocol::mtREPLAY_DELTA_RESPONSE)); } } });