< prev index next >

src/share/vm/utilities/vmError.hpp

Print this page
rev 12487 : 8166944: Hanging Error Reporting steps may lead to torn error logs.
Reviewed-by: cjplummer, dholmes
Summary: Interupt error reporting if reporting steps hang to enable subsequent reporting steps to run.
rev 12488 : [mq]: 8166944-Hanging-Error-Reporting-2

*** 1,7 **** /* ! * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 72,81 **** --- 72,91 ---- // When coredump_status is set to true this will contain the name/path to the core/minidump, // if coredump_status if false, this will (hopefully) contain a useful error explaining why // no core/minidump has been written to disk static char coredump_message[O_BUFLEN]; + // Timeout handling: + // Timestamp at which error reporting started; -1 if no error reporting in progress. + static volatile jlong _reporting_start_time; + // Whether or not error reporting did timeout. + static volatile bool _reporting_did_timeout; + // Timestamp at which the last error reporting step started; -1 if no error reporting + // in progress. + static volatile jlong _step_start_time; + // Whether or not the last error reporting step did timeout. + static volatile bool _step_did_timeout; // set signal handlers on Solaris/Linux or the default exception filter // on Windows, to handle recursive crashes. static void reset_signal_handlers();
*** 102,115 **** static void report_and_die(const char* message, const char* detail_fmt, ...) ATTRIBUTE_PRINTF(2, 3); static fdStream out; static fdStream log; // error log used by VMError::report_and_die() ! // Platform dependend helper functions used for timeout handling. static void reporting_started(); static void interrupt_reporting_thread(); public: // return a string to describe the error static char* error_string(char* buf, int buflen); --- 112,135 ---- static void report_and_die(const char* message, const char* detail_fmt, ...) ATTRIBUTE_PRINTF(2, 3); static fdStream out; static fdStream log; // error log used by VMError::report_and_die() ! // Timeout handling. ! // Hook functions for platform dependend functionality: static void reporting_started(); static void interrupt_reporting_thread(); + // Helper function to get the current timestamp. + static jlong get_current_timestamp(); + + // Accessors to get/set the start times for step and total timeout. + static void record_reporting_start_time(); + static jlong get_reporting_start_time(); + static void record_step_start_time(); + static jlong get_step_start_time(); + public: // return a string to describe the error static char* error_string(char* buf, int buflen);
*** 150,161 **** // check to see if fatal error reporting is in progress static bool fatal_error_in_progress() { return first_error_tid != -1; } static intptr_t get_first_error_tid() { return first_error_tid; } ! // Called by WatcherThread to check if the currently running error reporting did timeout. ! // Returns true if reporting did hit the global ErrorLogTimeout. static bool check_timeout(); }; #endif // SHARE_VM_UTILITIES_VMERROR_HPP --- 170,181 ---- // check to see if fatal error reporting is in progress static bool fatal_error_in_progress() { return first_error_tid != -1; } static intptr_t get_first_error_tid() { return first_error_tid; } ! // Called by the WatcherThread to check if error reporting has timed-out. ! // Returns true if error reporting has not completed within the ErrorLogTimeout limit. static bool check_timeout(); }; #endif // SHARE_VM_UTILITIES_VMERROR_HPP
< prev index next >