From 77c77b5eb3bad411cf49835408ef130787b3d4d8 Mon Sep 17 00:00:00 2001 From: John Knox Date: Tue, 19 Feb 2019 03:43:07 -0800 Subject: [PATCH] Don't throw exceptions from FlipperStep destructor Summary: Destructors should never throw, because if they are destructed while an exception is unwinding the stack the program will terminate. Reviewed By: passy Differential Revision: D14124423 fbshipit-source-id: 4b3d21663d44160bf24adacca25f50522d952e7c --- xplat/Flipper/FlipperStep.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/xplat/Flipper/FlipperStep.cpp b/xplat/Flipper/FlipperStep.cpp index 2cc4d1cf2..5ce197d99 100644 --- a/xplat/Flipper/FlipperStep.cpp +++ b/xplat/Flipper/FlipperStep.cpp @@ -1,12 +1,14 @@ -/* - * Copyright (c) 2018-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. +/** + * Copyright (c) Facebook, Inc. and its affiliates. * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. */ #include "FlipperStep.h" #include "FlipperState.h" +#include "Log.h" + +using facebook::flipper::log; void FlipperStep::complete() { isLogged = true; @@ -25,6 +27,13 @@ FlipperStep::FlipperStep(std::string step, FlipperState* s) { FlipperStep::~FlipperStep() { if (!isLogged) { - state->failed(name, ""); + try { + state->failed(name, ""); + } catch (std::exception& e) { + log(std::string("Exception occurred in FlipperStep destructor: ") + + e.what()); + } catch (...) { + log("Exception occurred in FlipperStep destructor"); + } } }