Commit 3a7d377d authored by Alan Frindell's avatar Alan Frindell Committed by Facebook Github Bot

Get rid of try/catch in messageAvailable, which is now noexcept

Summary: The problem with catching the exception here is stack information is lost.  Just let it std::terminate if it throws

Reviewed By: ikobzar

Differential Revision: D4831909

fbshipit-source-id: 42139bd7caee0fedff13328d52fa3be1c517e730
parent 1b6b202c
......@@ -54,21 +54,7 @@ class EventBase::FunctionRunner
// wake up the loop. We can ignore these messages.
return;
}
// The function should never throw an exception, because we have no
// way of knowing what sort of error handling to perform.
//
// If it does throw, log a message and abort the program.
try {
msg();
} catch (const std::exception& ex) {
LOG(ERROR) << "runInEventBaseThread() function threw a "
<< typeid(ex).name() << " exception: " << ex.what();
abort();
} catch (...) {
LOG(ERROR) << "runInEventBaseThread() function threw an exception";
abort();
}
msg();
}
};
......
......@@ -1351,6 +1351,21 @@ TEST(EventBaseTest, RunInLoopStopLoop) {
ASSERT_LE(c1.getCount(), 11);
}
TEST(EventBaseTest, messageAvailableException) {
auto deadManWalking = [] {
EventBase eventBase;
std::thread t([&] {
// Call this from another thread to force use of NotificationQueue in
// runInEventBaseThread
eventBase.runInEventBaseThread(
[]() { throw std::runtime_error("boom"); });
});
t.join();
eventBase.loopForever();
};
EXPECT_DEATH(deadManWalking(), ".*");
}
TEST(EventBaseTest, TryRunningAfterTerminate) {
EventBase eventBase;
CountedLoopCallback c1(&eventBase, 1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment