Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
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
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang