|
Quick Lists
|
|
Bug ID:
|
4963998
|
|
Votes
|
0
|
|
Synopsis
|
VM log is not flushed when the VM aborts
|
|
Category
|
hotspot:runtime_system
|
|
Reported Against
|
tiger-beta
|
|
Release Fixed
|
1.5(tiger-b35)
|
|
State
|
10-Fix Delivered,
bug
|
|
Priority:
|
1-Very High
|
|
Related Bugs
|
4515367
,
4906990
|
|
Submit Date
|
05-DEC-2003
|
|
Description
|
The logging functionality of 1.4.2 has regressed and is broken in 1.5 due to interactions with recent changes in the error handler.
Back-line engineers (such as myself) routinely use this feature to diagnose hard-to-reproduce crashes in the field. It is totally unacceptable to break this functionality in 1.5.
When the VM crashes on a customer, we need as much historical information as possible about the run in order to diagnose the bug. However, recent changes to the error handler for 4515367 have wrongly turned off log cleanup. This means that the VM will refuse to flush its logs in exactly the cases where the logs are most critical, when the VM crashes. This means that Sun engineers will not be able to inspect the most recent compilations.
The basic idea of 4515367 was to output crash information more robustly. However, it is unacceptable to disable the existing information dumps, at least unconditionally (by removing the ostream_exit call).
The ostream_exit call is intended to be robust, even if the the VM is crashing. It was designed to write diagnostic information for crashes.
If there is a strong reason not to call ostream_exit by default, then add a new flag which will allow us to get them flushed, or use LogCompilation:
if (LogCompilation) ostream_exit()
|
|
Work Around
|
N/A
|
|
Evaluation
|
...
The ostream_exit function finishes the log. It gathers side-files
generated by the compiler and appends them to the main file, and then
writes an epilogue onto the file. Most of this work is done in
defaultStream::finish_log().
The call ostream_flush_all does not perform this final assembly.
It should do it. Note that final assembly is a one-time action,
and the name "flush_all" suggests that you can call it repeatedly.
So I think ostream_flush_all should be renamed ostream_finish.
...
In order to get called safely from abort path, some part of
defaultStream::finish_log() needs to be changed to use async-safe
functions, also it should avoid using large stack buffer.
xxxxx@xxxxx 2003-12-09
fixed in beta2
xxxxx@xxxxx 2004-01-12
|
|
Comments
|
PLEASE NOTE: JDK6 is formerly known as Project Mustang
|
|
|
 |