Make crash_handler volatile to prevent compiler optimizing it away.

This bug manifests itself on Android x64 (in ExceptionHandlerTest::ExternalDumper), but is possible on any platform.

The compiler is unaware of the code which runs in the signal handler which reads this variable. Without volatile the compiler is free to optimise away writes to this variable which it believes are never read.

BUG=381142, 346626
R=thestig@chromium.org

Review URL: https://breakpad.appspot.com/8664002

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1343 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
rmcilroy@chromium.org 2014-07-02 10:27:39 +00:00
parent bf0e00374f
commit 501673c86b

View File

@ -252,7 +252,11 @@ class ExceptionHandler {
MinidumpDescriptor minidump_descriptor_; MinidumpDescriptor minidump_descriptor_;
HandlerCallback crash_handler_; // Must be volatile. The compiler is unaware of the code which runs in
// the signal handler which reads this variable. Without volatile the
// compiler is free to optimise away writes to this variable which it
// believes are never read.
volatile HandlerCallback crash_handler_;
// The global exception handler stack. This is need becuase there may exist // The global exception handler stack. This is need becuase there may exist
// multiple ExceptionHandler instances in a process. Each will have itself // multiple ExceptionHandler instances in a process. Each will have itself