From 5e2b8747df8eabdd0daf091f1afe3b7b3d6c2719 Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Tue, 18 Nov 2014 15:50:47 -0800 Subject: Fix fault handler invoked before vm running. If the ART fault handler is invoked before the vm is running, the code derefences a NULL pointer. In this case, just invoke the next handler in the chain instead. Change-Id: I58f0493eae1825d7a92a1e052c88e80527914dba --- runtime/fault_handler.cc | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'runtime/fault_handler.cc') diff --git a/runtime/fault_handler.cc b/runtime/fault_handler.cc index ab3ec62d69..65844a5a48 100644 --- a/runtime/fault_handler.cc +++ b/runtime/fault_handler.cc @@ -177,6 +177,12 @@ void FaultManager::HandleFault(int sig, siginfo_t* info, void* context) { Thread* self = Thread::Current(); + // If ART is not running, or the thread is not attached to ART pass the + // signal on to the next handler in the chain. + if (self == nullptr || Runtime::Current() == nullptr || !Runtime::Current()->IsStarted()) { + InvokeUserSignalHandler(sig, info, context); + return; + } // Now set up the nested signal handler. // TODO: add SIGSEGV back to the nested signals when we can handle running out stack gracefully. -- cgit v1.2.3-59-g8ed1b