diff --git a/xplat/Flipper/FlipperClient.cpp b/xplat/Flipper/FlipperClient.cpp index 488686c41..fbead0e68 100644 --- a/xplat/Flipper/FlipperClient.cpp +++ b/xplat/Flipper/FlipperClient.cpp @@ -302,15 +302,10 @@ void FlipperClient::performAndReportError(const std::function& func) { try { func(); } catch (std::exception& e) { - if (connected_) { - std::string callstack = this->callstack(); - dynamic message = dynamic::object( - "error", - dynamic::object("message", e.what())("stacktrace", callstack)( - "name", e.what())); - socket_->sendMessage(message); - } else { - log("Error: " + std::string(e.what())); + handleError(e); + } catch (std::exception* e) { + if (e) { + handleError(*e); } } catch (...) { // Generic catch block for the exception of type not belonging to @@ -320,6 +315,19 @@ void FlipperClient::performAndReportError(const std::function& func) { #endif } +void FlipperClient::handleError(std::exception& e) { + if (connected_) { + std::string callstack = this->callstack(); + dynamic message = dynamic::object( + "error", + dynamic::object("message", e.what())("stacktrace", callstack)( + "name", e.what())); + socket_->sendMessage(message); + } else { + log("Error: " + std::string(e.what())); + } +} + std::string FlipperClient::getState() { return flipperState_->getState(); } diff --git a/xplat/Flipper/FlipperClient.h b/xplat/Flipper/FlipperClient.h index abf10065f..21742b8e7 100644 --- a/xplat/Flipper/FlipperClient.h +++ b/xplat/Flipper/FlipperClient.h @@ -110,6 +110,7 @@ class FlipperClient : public FlipperConnectionManager::Callbacks { void disconnect(std::shared_ptr plugin); void startBackgroundPlugins(); std::string callstack(); + void handleError(std::exception& e); }; } // namespace flipper