--- old/src/hotspot/share/utilities/events.cpp 2019-02-15 11:51:51.570925374 +0900 +++ new/src/hotspot/share/utilities/events.cpp 2019-02-15 11:51:51.326927432 +0900 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2019, 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 @@ -36,7 +36,7 @@ EventLog* Events::_logs = NULL; StringEventLog* Events::_messages = NULL; -StringEventLog* Events::_exceptions = NULL; +ExtendedStringEventLog* Events::_exceptions = NULL; StringEventLog* Events::_redefinitions = NULL; UnloadingEventLog* Events::_class_unloading = NULL; StringEventLog* Events::_deopt_messages = NULL; @@ -67,7 +67,7 @@ void Events::init() { if (LogEvents) { _messages = new StringEventLog("Events"); - _exceptions = new StringEventLog("Internal exceptions"); + _exceptions = new ExtendedStringEventLog("Internal exceptions"); _redefinitions = new StringEventLog("Classes redefined"); _class_unloading = new UnloadingEventLog("Classes unloaded"); _deopt_messages = new StringEventLog("Deoptimization events"); --- old/src/hotspot/share/utilities/events.hpp 2019-02-15 11:51:52.067921180 +0900 +++ new/src/hotspot/share/utilities/events.hpp 2019-02-15 11:51:51.815923306 +0900 @@ -135,37 +135,43 @@ }; // A simple wrapper class for fixed size text messages. -class StringLogMessage : public FormatBuffer<256> { +template +class FormatStringLogMessage : public FormatBuffer { public: // Wrap this buffer in a stringStream. stringStream stream() { - return stringStream(_buf, size()); + return stringStream(this->_buf, this->size()); } }; +typedef FormatStringLogMessage<256> StringLogMessage; +typedef FormatStringLogMessage<512> ExtendedStringLogMessage; // A simple ring buffer of fixed size text messages. -class StringEventLog : public EventLogBase { +template +class FormatStringEventLog : public EventLogBase< FormatStringLogMessage > { public: - StringEventLog(const char* name, int count = LogEventsBufferEntries) : EventLogBase(name, count) {} + FormatStringEventLog(const char* name, int count = LogEventsBufferEntries) : EventLogBase< FormatStringLogMessage >(name, count) {} void logv(Thread* thread, const char* format, va_list ap) ATTRIBUTE_PRINTF(3, 0) { - if (!should_log()) return; + if (!this->should_log()) return; - double timestamp = fetch_timestamp(); - MutexLockerEx ml(&_mutex, Mutex::_no_safepoint_check_flag); - int index = compute_log_index(); - _records[index].thread = thread; - _records[index].timestamp = timestamp; - _records[index].data.printv(format, ap); + double timestamp = this->fetch_timestamp(); + MutexLockerEx ml(&this->_mutex, Mutex::_no_safepoint_check_flag); + int index = this->compute_log_index(); + this->_records[index].thread = thread; + this->_records[index].timestamp = timestamp; + this->_records[index].data.printv(format, ap); } void log(Thread* thread, const char* format, ...) ATTRIBUTE_PRINTF(3, 4) { va_list ap; va_start(ap, format); - logv(thread, format, ap); + this->logv(thread, format, ap); va_end(ap); } }; +typedef FormatStringEventLog<256> StringEventLog; +typedef FormatStringEventLog<512> ExtendedStringEventLog; class InstanceKlass; @@ -189,7 +195,7 @@ // A log for internal exception related messages, like internal // throws and implicit exceptions. - static StringEventLog* _exceptions; + static ExtendedStringEventLog* _exceptions; // Deoptization related messages static StringEventLog* _deopt_messages; @@ -306,6 +312,13 @@ out->print_raw(lm); out->cr(); } + +// Implement a printing routine for the ExtendedStringLogMessage +template <> +inline void EventLogBase::print(outputStream* out, ExtendedStringLogMessage& lm) { + out->print_raw(lm); + out->cr(); +} // Place markers for the beginning and end up of a set of events. // These end up in the default log. --- old/src/hotspot/share/utilities/exceptions.hpp 2019-02-15 11:51:52.580916852 +0900 +++ new/src/hotspot/share/utilities/exceptions.hpp 2019-02-15 11:51:52.317919071 +0900 @@ -237,7 +237,11 @@ // visible within the scope containing the THROW. Usually this is achieved by declaring the function // with a TRAPS argument. +#ifdef THIS_FILE +#define THREAD_AND_LOCATION THREAD, THIS_FILE, __LINE__ +#else #define THREAD_AND_LOCATION THREAD, __FILE__, __LINE__ +#endif #define THROW_OOP(e) \ { Exceptions::_throw_oop(THREAD_AND_LOCATION, e); return; }