RFR(S): 8074354: tests that intentionally crash the VM can timeout creating a core file

Yumin Qi yumin.qi at oracle.com
Fri Apr 10 03:18:36 UTC 2015


Hi, Thomas and Dan

   http://cr.openjdk.java.net/~minqi/8074354/webrev07/

On 4/9/2015 7:51 PM, Yumin Qi wrote:
> Please hold on, I missed the test cases:
>
> *test/runtime/Unsafe/RangeCheck.java
> *
> *test/runtime/memory/ReadFromNoaccessArea.java
>
Added.
> Also some file heads need to be updated with this year.
>
Changed

Thanks
Yumin

> Thanks
> Yumin
>
> *
> On 4/9/2015 7:07 PM, Yumin Qi wrote:
>> Hi, Thomas and Dan
>>
>>   The same URL is updated with new version.
>>
>>   http://cr.openjdk.java.net/~minqi/8074354/webrev07/
>>
>>   I remove the public access to VMError::out, 
>> VMError::coredump_message and the size of VMError::coredump_message.
>>   Added private static HANDLE in os_windows.cpp for dumpFile as 
>> suggested by Thomas.
>>
>>   Tests passes JPRT and manual tests.
>>
>> Thanks
>> Yumin
>>
>>
>> On 4/9/2015 1:32 AM, Thomas Stüfe wrote:
>>> Hi Yumin,
>>>
>>> I do not think exposing VMError::coredump_status buffer just for the 
>>> sake of using it as a scratch buffer in os::abort() is a good idea. 
>>> It is very confusing and has nothing to do with the purpose of 
>>> VMerror::coredump_status.
>>>
>>> Also, VMerror::coredump_status is static, so you do not even gain 
>>> anything over just using a global or function scope static buffer. 
>>> Either we are worried about thread safety in os::abort(), or we 
>>> aren't. If we aren't, just use a local static buffer, it is much 
>>> clearer and no need to expose VMError::coredump_status like this.
>>>
>>> Apart from that, see my remarks in yesterdays mail.
>>>
>>> Cheers, Thomas
>>>
>>>
>>>
>>>
>>> On Thu, Apr 9, 2015 at 5:16 AM, Yumin Qi <yumin.qi at oracle.com 
>>> <mailto:yumin.qi at oracle.com>> wrote:
>>>
>>>     Hi, Dan
>>>
>>>       New webrev at
>>>     http://cr.openjdk.java.net/~minqi/8074354/webrev07/
>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev07/>
>>>
>>>       To make code clean, add os::abort_internal which is only used
>>>     for Windows.
>>>       Since passing VMError::coredump_message and its size as
>>>     parameters across multiple functions makes function have a bigger
>>>     signature, I change the way to access them -- add two functions in
>>>     VMError to access them: coredump_msg_buffer() and
>>>     coredump_msg_buffer_size(). They are static members, so can save
>>>     stack space for passing around.
>>>
>>>       in os_windows.cpp, abort(bool, void*, void*):
>>>       if error encountered, exit with error messages.
>>>       If no error, VMError::coredump_message contains the dump
>>>     path/name. I just use them so no need to have extra space for name
>>>     allocation.
>>>
>>>       Passed JPRT and manual tests.
>>>
>>>       Thanks
>>>       Yumin
>>>
>>>
>>>     On 4/7/2015 9:23 AM, Daniel D. Daugherty wrote:
>>>>     On 4/1/15 10:57 AM, Yumin Qi wrote:
>>>>>     Hi, Dan and Thomas,
>>>>>
>>>>>       I have a new webrev at
>>>>>     http://cr.openjdk.java.net/~minqi/8074354/webrev06/
>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev06/>
>>>>
>>>>
>>>>     src/share/vm/runtime/globals.hpp
>>>>         Sorry, I didn't notice this before:
>>>>
>>>>         L939:   product(bool, CreateCoredumpOnCrash,
>>>>     true,                                \
>>>>         L940:           "Create minidump on VM fatal
>>>>     error")                              \
>>>>
>>>>             The "minidump" on L940 should change also. Don't know 
>>>> if you
>>>>             want to say "core/mini dump" or something else.
>>>>
>>>>
>>>>     src/share/vm/runtime/os.hpp
>>>>         L719:   // On Linux/Solaris it will simply check core dump
>>>>     limits while on Windows will do nothing.
>>>>             grammar: 'on Windows will do nothing'
>>>>                   -> 'on Windows it will do nothing'
>>>>
>>>>
>>>>     src/share/vm/runtime/arguments.cpp
>>>>         No comments.
>>>>
>>>>     src/share/vm/utilities/vmError.hpp
>>>>         No comments.
>>>>
>>>>     src/share/vm/utilities/vmError.cpp
>>>>         No comments.
>>>>
>>>>     src/os/aix/vm/os_aix.cpp
>>>>         No comments.
>>>>
>>>>     src/os/bsd/vm/os_bsd.cpp
>>>>         No comments.
>>>>
>>>>     src/os/linux/vm/os_linux.cpp
>>>>         No comments.
>>>>
>>>>     src/os/posix/vm/os_posix.cpp
>>>>         No comments.
>>>>
>>>>     src/os/solaris/vm/os_solaris.cpp
>>>>         No comments.
>>>>
>>>>     src/os/windows/vm/os_windows.cpp
>>>>         L92: jio_snprintf(buffer, bufferSize,
>>>>     "%s\\hs_err_pid%u.mdmp", get_current_directory(NULL, 0),
>>>>     current_process_id());
>>>>             Other non-Windows calls to get_current_directory() do a 
>>>> NULL
>>>>             check before using the return value. The original Windows
>>>>             code that called get_current_directory() did not make this
>>>>             check, but I think it's better to be consistent and safe.
>>>>
>>>>         L1007:   static char buffer[O_BUFLEN];
>>>>         L1008:   char filename[FILENAME_MAX];
>>>>             Two more potentially large stack variables here. Will we
>>>>             run into stack overflow on Win* more frequently when what
>>>>             we really wanted was the reason for the abort() call?
>>>>
>>>>             The reason the original code used 'buffer' to construct 
>>>> the
>>>>             dump file name was to save space. The original code was 
>>>> also
>>>>             careful to not need the file name in any error messages 
>>>> after
>>>>             the point at which the dump file was successfully created.
>>>>
>>>>             It would be better (more resilient) if you could pass in
>>>>             an already existing buffer to abort() like the original
>>>>             code passed into os::check_or_create_dump(). Yes, that
>>>>             would require visiting all existing calls to abort().
>>>>
>>>>         L1015:   assert(out->is_open(), "defaultStream should be 
>>>> open");
>>>>             Is it possible for os::abort() to be called early 
>>>> enough on
>>>>             Windows such that VMError::out is not actually setup? Yes,
>>>>             this would have to be absolutely catastrophic...
>>>>
>>>>             See the comment in os_solaris.cpp L1520-1522.
>>>>
>>>>         L1018: jio_snprintf(buffer, sizeof(buffer), "%s", "Either
>>>>     CreateCoredumpOnCrash is disabled from command"
>>>>         L1019                  " line or coredump is not available");
>>>>             When you are using jio_snprintf() as a replacement for:
>>>>
>>>>                 strncpy(buffer, "my string", sizeof(buffer));
>>>>                 buffer[sizeof(buffer) - 1] = '\0';
>>>>
>>>>             you don't need the "%s" format string. So this code 
>>>> would be:
>>>>
>>>>             jio_snprintf(buffer, sizeof(buffer),
>>>>                          "Either CreateCoredumpOnCrash is disabled 
>>>> from "
>>>>                          "command line or coredump is not available");
>>>>
>>>>             Same comment for: L1026, L1039
>>>>
>>>>         L1020: goto done;
>>>>             The use of 'goto' makes me cringe. You can refactor much
>>>>             of this logic into an abort_internal() function that
>>>>             abort() calls and keep all the original "return" logic
>>>>             to bail out.
>>>>
>>>>         L1045: // Older versions of dbghelp.h doesn't contain all
>>>>             grammar: 'doesn't' -> 'do not'
>>>>
>>>>         L1052:   cwd = get_current_directory(NULL, 0);
>>>>         L1053: jio_snprintf(filename, sizeof(filename),
>>>>     "%s\\hs_err_pid%u.mdmp", cwd, current_process_id());
>>>>             Other non-Windows calls to get_current_directory() do a 
>>>> NULL
>>>>             check before using the return value. The original Windows
>>>>             code that called get_current_directory() did not make this
>>>>             check, but I think it's better to be consistent and safe.
>>>>
>>>>         L1092:   // well done.
>>>>             Like a overcooked steak? :-) Not sure what you're trying
>>>>             to say here...
>>>>
>>>>     test/runtime/ErrorHandling/ProblematicFrameTest.java
>>>>         No comments.
>>>>
>>>> test/runtime/ErrorHandling/SafeFetchInErrorHandlingTest.java
>>>>         No comments.
>>>>
>>>>     test/runtime/ErrorHandling/SecondaryErrorTest.java
>>>>         No comments.
>>>>
>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency1.java
>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency2.java
>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency3.java
>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency4.java
>>>>         No comments on these four.
>>>>
>>>>
>>>>     Dan
>>>>
>>>>
>>>>>
>>>>>       What changes:
>>>>>
>>>>>        1) os_windows.cpp, os::abort(bool ....):
>>>>>           a) Since when abort() is called,  the last function     
>>>>> called before exit process, VMError::log already closed, which
>>>>>     is the file logging. defaultStream still available to use, so
>>>>>     use it for writing error or success messages. VMError::out is
>>>>>     the defaultStream, for using it, added a function out_stream() 
>>>>>     in VMError.
>>>>>           b) Delete the codes which decide to write core based on
>>>>>     client/server version with debug. The new code is if
>>>>>     CreateCoredumpOnCrash set or dump_core is on, the coredump will
>>>>>     be tried no matter which version it is. There is no special
>>>>>     reason not to dump core with client version I think. Any concern
>>>>>     for this change?
>>>>>           c) Use of 'goto' in this function. I tried not to use it,
>>>>>     but using it makes code clear. I remember somewhere suggest not
>>>>>     using 'goto' in cplusplus.
>>>>>
>>>>>         2) changed comments to make them consistent as indicated 
>>>>> by Dan.
>>>>>
>>>>>         3) Added/modified head version for files.
>>>>>
>>>>>         Tests: JPRT, manual test on local Windows.
>>>>>
>>>>>     Thanks
>>>>>     Yumin
>>>>>
>>>>>
>>>>>     On 3/31/2015 1:25 AM, Thomas Stüfe wrote:
>>>>>>     Hi Daniel, Yumin,
>>>>>>
>>>>>>     sorry, a lot of Yumins changes were based on suggestions from
>>>>>>     me, so here more background:
>>>>>>
>>>>>>     Yumin reversed the order of error log writing and core dumping.
>>>>>>     The reason for that are explained in detail at the start of the
>>>>>>     mail thread, in short:
>>>>>>
>>>>>>     - on Windows core file dumping may hang - its rare but it
>>>>>>     happens - preventing error logs. Depending on who you ask,
>>>>>>     error logs are more important than minidumps, so it makes sense
>>>>>>     to first write the erorr log.
>>>>>>     - This also brings windows core paths closer to UNIX code
>>>>>>     paths. See below.
>>>>>>
>>>>>>     About writing to stderr in os::abort():
>>>>>>
>>>>>>     After this change, calling VmError::report_coredump_status() in
>>>>>>     os::abort() will not do anything because the error log is
>>>>>>     already written at that point. I suggested to Yumin writing to
>>>>>>     stderr instead in os::abort()  because that mimicks UNIX
>>>>>>     behaviour: On UNIX, you call abort(3), which writes a core and
>>>>>>     aborts. It writes a short message to stderr "Aborted (core
>>>>>>     dumped)" or just "Aborted".
>>>>>>
>>>>>>     After Yumins change, on Windows os::abort also writes the core,
>>>>>>     then aborts. It made sense to me that this function should
>>>>>>     behave the same way as on UNIX: if core writing fails, write to
>>>>>>     stderr. There is no way otherwise to communicate a core dump
>>>>>>     writing failure. After writing the core, process stops.
>>>>>>
>>>>>>     ---
>>>>>>
>>>>>>     About the control flows:
>>>>>>
>>>>>>     Before Yumins change:
>>>>>>
>>>>>>     On Windows
>>>>>>     1) os::check_or_create_dump(): we wrote the core dump and then
>>>>>>     information about the dump (file location, success or error)
>>>>>>     was handed to the misnamed VmError::report_coredump_status(),
>>>>>>     which just stored that information.
>>>>>>     2) VmError::report(): Error log was written and in step 63
>>>>>>     information about the core (already written at that point) was
>>>>>>     added to error log.
>>>>>>     3) os::abort() just did an exit(3)
>>>>>>
>>>>>>     On Unix,
>>>>>>     1) os::check_or_create_dump(): checks the limits to guess
>>>>>>     whether core dumping later will succeed. Again, that
>>>>>>     information is handed to VmError::report_coredump_status()
>>>>>>     2) VmError::report(): Error log is written and in step 63,
>>>>>>     information about the core's probable future location is added
>>>>>>     to error log. Here, messages use past tense, which is
>>>>>>     misleading, because the core is not yet written.
>>>>>>     3) os::abort() calls abort(3), which stops and writes a core.
>>>>>>
>>>>>>     Yumin pushed core file writing on Windows down to os::abort().
>>>>>>     This brings the control flow much closer to Unix:
>>>>>>
>>>>>>     (1) call os::check_dump_limit() to check the prerequisites for
>>>>>>     core file writing and gather a bit information to put in the
>>>>>>     error log: On Unix, limit checks, on windows, so far nothing
>>>>>>     much but precalculating the error file name.
>>>>>>     (2) VmError::report(): Error log is written and information
>>>>>>     about the core's probable location is added to error log.
>>>>>>     (3) os::abort() is called, which on all platforms:
>>>>>>      - dumps the core
>>>>>>      - if failing, writes a one-liner to stderr
>>>>>>      - stops the process.
>>>>>>
>>>>>>     I think, if one agrees that reversing order of core dumping and
>>>>>>     error log writing on windows is a good thing, this change looks
>>>>>>     ok to me. Some improvements could make it clearer:
>>>>>>
>>>>>>     - maybe rename "os::check_dump_limit()" (was my suggestion,
>>>>>>     sorry) to "os::check_core_prerequisites()" - that leaves room
>>>>>>     to flesh it out a bit more on Windows, where we do not have
>>>>>>     UNIX limits.
>>>>>>     - make the messages in VMError::report() future sense: "Will
>>>>>>     write core file to location.....".
>>>>>>     - Make the messages written in os::abort() on Windows clearer,
>>>>>>     and shorter, and we also do not need the buffer to be static
>>>>>>     here. Actually, if we want to be as on UNIX, just dumping "core
>>>>>>     file writing succeeded" or "failed" - maybe with an error
>>>>>>     number from GetLastError() - will be enough because the file
>>>>>>     location is already printed in the error log. Like on UNIX.
>>>>>>
>>>>>>     Kind Regards, Thomas
>>>>>>
>>>>>>
>>>>>>     On Mon, Mar 30, 2015 at 9:51 PM, Daniel D. Daugherty
>>>>>>     <daniel.daugherty at oracle.com
>>>>>>     <mailto:daniel.daugherty at oracle.com>> wrote:
>>>>>>
>>>>>>         Re: report_coredump_status() is really 
>>>>>> record_coredump_status()
>>>>>>
>>>>>>         The report_coredump_status() function is designed to 
>>>>>> record two
>>>>>>         things about core dumps for later reporting by the code that
>>>>>>         generates the hs_err_pid file. That's why the original
>>>>>>         report_coredump_status() didn't output anything to stderr.
>>>>>>
>>>>>>         By changing the Windows calls to report_coredump_status() 
>>>>>> into
>>>>>>         jio_fprintf() calls you have:
>>>>>>
>>>>>>         - put output onto stderr that should go to the hs_err_pid 
>>>>>> file
>>>>>>         - made the windows code paths work differently than the
>>>>>>         non-windows
>>>>>>           code paths
>>>>>>
>>>>>>
>>>>>>         Dan
>>>>>>
>>>>>>
>>>>>>
>>>>>>         On 3/30/15 1:28 PM, Yumin Qi wrote:
>>>>>>
>>>>>>             Thanks Dan
>>>>>>
>>>>>>             On 3/30/2015 11:25 AM, Daniel D. Daugherty wrote:
>>>>>>
>>>>>>                 On 3/25/15 12:11 PM, Yumin Qi wrote:
>>>>>>
>>>>>>                     Hi, all
>>>>>>
>>>>>>                         I updated the webrev with a new change to
>>>>>>                     test case:
>>>>>>                     test/runtime/Unsafe/RangeCheck.java
>>>>>>
>>>>>>                         Add -XX:-CreateCoredumpOnCrash to test, no
>>>>>>                     dump needed on this case.
>>>>>>
>>>>>>                         new  webrev:
>>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev05/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev05/>
>>>>>>
>>>>>>
>>>>>>                 General nit - please update copyright lines to 2015
>>>>>>                 as needed
>>>>>>
>>>>>>                 src/share/vm/runtime/globals.hpp
>>>>>>                     No comments.
>>>>>>
>>>>>>                 src/share/vm/runtime/os.hpp
>>>>>>                     line 720:   // On Windows this will create an
>>>>>>                 actual minidump, on Linux/Solaris it will simply
>>>>>>                 check core dump limits
>>>>>>                     line 721:   static void check_dump_limit(char*
>>>>>>                 buffer, size_t bufferSize);
>>>>>>                         The comment on line 720 no longer matches
>>>>>>                 with the function
>>>>>>                         rename from check_or_create_dump() to
>>>>>>                 check_dump_limit().
>>>>>>
>>>>>>                         You have this comment in vmError.cpp:
>>>>>>                         943     // check core dump limits on
>>>>>>                 Linux/Solaris, nothing on Windows
>>>>>>                         944 os::check_dump_limit(buffer,
>>>>>>                 sizeof(buffer));
>>>>>>
>>>>>>                         so the two comments are out of sync.
>>>>>>
>>>>>>             Will convert them to be consistent.
>>>>>>
>>>>>>                 src/share/vm/runtime/arguments.cpp
>>>>>>                     line 3252: } else if (match_option(option,
>>>>>>                 "-XX:+CreateMinidumpOnCrash", &tail)) {
>>>>>>                     line 3256: } else if (match_option(option,
>>>>>>                 "-XX:-CreateMinidumpOnCrash", &tail)) {
>>>>>>                         These two checks should use the
>>>>>>                 match_option() version
>>>>>>                         without a '&tail' parameter.
>>>>>>
>>>>>>             Will use version w/o tail.
>>>>>>
>>>>>>                 src/share/vm/utilities/vmError.cpp
>>>>>>                     line 217: bool VMError::coredump_status =
>>>>>>                 true;       // presume we can dump core file first
>>>>>>                         I don't think you should init this to true.
>>>>>>                 It confuses
>>>>>>                         things with
>>>>>>                 VMError::report_coredump_status(). It will also
>>>>>>                         confuse this code:
>>>>>>
>>>>>>                         526   STEP(63, "(printing core file
>>>>>>                 information)")
>>>>>>                         529       if (coredump_status) {
>>>>>>                         530  st->print("Core dump written. Default
>>>>>>                 location: %s", coredump_message);
>>>>>>
>>>>>>                         because coredump_status won't accurately
>>>>>>                 reflect whether
>>>>>>                         the coredump_message field has been set.
>>>>>>
>>>>>>                     line 943: // check core dump limits on
>>>>>>                 Linux/Solaris, nothing on Windows
>>>>>>                         This updated comment doesn't match the
>>>>>>                 unmodified
>>>>>>                         comment in os.hpp:
>>>>>>
>>>>>>                         720:   // On Windows this will create an
>>>>>>                 actual minidump, on Linux/Solaris it will simply
>>>>>>                 check core dump limits
>>>>>>
>>>>>>             I will consider your comments, then revise with a new
>>>>>>             version. I remember here there is a case, if status not
>>>>>>             set, it will output an inconsistent message. Will check
>>>>>>             again.
>>>>>>
>>>>>>                 src/os/aix/vm/os_aix.cpp
>>>>>>                     No comments.
>>>>>>
>>>>>>                 src/os/bsd/vm/os_bsd.cpp
>>>>>>                     No comments.
>>>>>>
>>>>>>                 src/os/linux/vm/os_linux.cpp
>>>>>>                     No comments.
>>>>>>
>>>>>>                 src/os/posix/vm/os_posix.cpp
>>>>>>                     No comments.
>>>>>>
>>>>>>                 src/os/solaris/vm/os_solaris.cpp
>>>>>>                     No comments.
>>>>>>
>>>>>>                 src/os/windows/vm/os_windows.cpp
>>>>>>                     line 1008: static char buffer[O_BUFLEN];
>>>>>>                         Why switch from a buffer parameter to a
>>>>>>                 static buffer?
>>>>>>                         What happens with parallel calls to
>>>>>>                 abort()? Will the static
>>>>>>                         buffer get stomped by the competing threads?
>>>>>>
>>>>>>             The original buffer is static too.  Carrying an buffer
>>>>>>             for abort seems not right. This buffer in fact only for
>>>>>>             storing file name (based on pid) here.
>>>>>>             abort() will dump the core file, should we prevent
>>>>>>             multi-thread calling to this function? I did not check
>>>>>>             this part, will check if it is MT-safe.
>>>>>>
>>>>>>
>>>>>>                     line 1015:   // If running on a client version
>>>>>>                 of Windows and user has not explicitly enabled 
>>>>>> dumping
>>>>>>                     line 1016:   if
>>>>>>                 (!os::win32::is_windows_server() &&
>>>>>>                 !CreateCoredumpOnCrash) {
>>>>>>                         The default for CreateCoredumpOnCrash is
>>>>>>                 now 'true' so the
>>>>>>                         comment and logic are no longer correct
>>>>>>                 here. The Windows
>>>>>>                         Client VM will generate minidumps by 
>>>>>> default.
>>>>>>
>>>>>>                     old line 1007:
>>>>>> VMError::report_coredump_status("Minidumps are not
>>>>>>                 enabled by default on client versions of Windows",
>>>>>>                 false);
>>>>>>                     new line 1017: jio_fprintf(stderr, "Minidumps
>>>>>>                 are not enabled by default on client versions of
>>>>>>                 Windows.\n");
>>>>>>                         There are a number of places where we
>>>>>>                 change from
>>>>>>                 VMError::report_coredump_status() to jio_fprintf()
>>>>>>                         and I'm not quite seeing why this was done.
>>>>>>
>>>>>>                         Update: VMError::report_coredump_status()
>>>>>>                 is misnamed. It doesn't
>>>>>>                         report anything in the sense that it
>>>>>>                 doesn't print anything. It
>>>>>>                         does record two pieces of information about
>>>>>>                 core dumps so maybe
>>>>>>                         it should be 
>>>>>> VMError::record_coredump_status().
>>>>>>
>>>>>>                     line 1100: jio_fprintf(stderr, "%s.\n", buffer);
>>>>>>                         At this point, buffer contains the path 
>>>>>> to the
>>>>>>                         mini-dump file so the above line simply 
>>>>>> prints
>>>>>>                         that on stderr. Why?
>>>>>>
>>>>>>                         Yes, I see that the old code did something
>>>>>>                 similar:
>>>>>>
>>>>>>                         1090
>>>>>>                  VMError::report_coredump_status(buffer, true);
>>>>>>
>>>>>>                         but report_coredump_status() didn't
>>>>>>                 actually print
>>>>>>                         anything. It just squirreled away these in
>>>>>>                 vmError.cpp:
>>>>>>
>>>>>>                         217 bool VMError::coredump_status;
>>>>>>                         218 char 
>>>>>> VMError::coredump_message[O_BUFLEN];
>>>>>>
>>>>>>                         See comments above about how
>>>>>>                 report_coredump_status()
>>>>>>                         is misnamed.
>>>>>>
>>>>>>                     At this point, I'm convinced that all the
>>>>>>                 changes from
>>>>>>                 VMError::report_coredump_status() to 
>>>>>> jio_fprintf() are
>>>>>>                     a bad idea.
>>>>>>
>>>>>>
>>>>>>             Changing to jio_fprintf is because
>>>>>>             report_coredump_status did not output anything, it is
>>>>>>             just a logging as you indicated. It is reasonable we
>>>>>>             change it to record_coredump_status instead. How about
>>>>>>             add printout to report_coredump_status? So I do not
>>>>>>             need to use jio_printf here.
>>>>>>
>>>>>>             Other consideration of using jio_fprintf after call
>>>>>>             shutdown called, the static output stream still exists,
>>>>>>             but not guaranteed to work as expected.
>>>>>>
>>>>>>
>>>>>>             Thanks
>>>>>>             Yumin
>>>>>>
>>>>>> test/runtime/ErrorHandling/ProblematicFrameTest.java
>>>>>>                     No comments.
>>>>>>
>>>>>> test/runtime/ErrorHandling/SafeFetchInErrorHandlingTest.java
>>>>>>                     No comments.
>>>>>>
>>>>>> test/runtime/ErrorHandling/SecondaryErrorTest.java
>>>>>>                     No comments.
>>>>>>
>>>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency1.java
>>>>>>                     No comments.
>>>>>>
>>>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency2.java
>>>>>>                     No comments.
>>>>>>
>>>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency3.java
>>>>>>                     No comments.
>>>>>>
>>>>>> test/runtime/Safepoint/AssertSafepointCheckConsistency4.java
>>>>>>                     No comments.
>>>>>>
>>>>>>                 test/runtime/Unsafe/RangeCheck.java
>>>>>>                     No comments.
>>>>>>
>>>>>> test/runtime/memory/ReadFromNoaccessArea.java
>>>>>>                     No comments.
>>>>>>
>>>>>>
>>>>>>
>>>>>>                     Thanks
>>>>>>                     Yumin
>>>>>>
>>>>>>
>>>>>>                     On 3/23/2015 11:48 AM, Yumin Qi wrote:
>>>>>>
>>>>>>                         Since Thomas is not a reviewer in open jdk,
>>>>>>                         I need two volunteers (at least one
>>>>>>                         "R"eviewer).
>>>>>>
>>>>>>                         Dan, since you already reviewed previous
>>>>>>                         version, could you have a look?
>>>>>>
>>>>>>                         Thanks
>>>>>>                         Yumin
>>>>>>
>>>>>>                         On 3/20/2015 3:20 PM, Yumin Qi wrote:
>>>>>>
>>>>>>                             Thomas,
>>>>>>
>>>>>>                              Thanks. Yes, it is webrev04. Also, I
>>>>>>                             have updated webrev04 to add another
>>>>>>                             test case change:
>>>>>> test/runtime/memory/ReadFromNoaccessArea.java
>>>>>>                              (Thanks Dan's update)
>>>>>>
>>>>>>                             Thanks
>>>>>>                             Yumin
>>>>>>
>>>>>>                             On 3/20/2015 11:55 AM, Thomas Stüfe 
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>>                                 Hi Yumin,
>>>>>>
>>>>>>                                 I think you meant to post webrev.04?
>>>>>>
>>>>>>                                 I looked at 04, and it looks nice.
>>>>>>                                 Thank you!
>>>>>>
>>>>>>                                 (still only reviewer with r)
>>>>>>
>>>>>>                                 Thomas
>>>>>>
>>>>>>                                 On Mar 20, 2015 6:20 PM, "Yumin Qi"
>>>>>>                                 <yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>>> wrote:
>>>>>>
>>>>>>                                     Hi, All
>>>>>>
>>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev03/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev03/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev03/>
>>>>>>
>>>>>>                                     This version is based on
>>>>>>                                 Thomas' suggestion.
>>>>>>                                     Tests passed
>>>>>> vm.runtime.quick.testlist, JPRT and
>>>>>>                                 manual tests.
>>>>>>
>>>>>>                                     Thanks
>>>>>>                                     Yumin
>>>>>>
>>>>>>                                     On 3/18/2015 10:06 AM, Yumin Qi
>>>>>>                                 wrote:
>>>>>>
>>>>>>
>>>>>>                                         On 3/18/2015 4:26 AM,
>>>>>>                                 Thomas Stüfe wrote:
>>>>>>
>>>>>>                                             Hi Yumin,
>>>>>>
>>>>>>                                             - just aesthetics, but
>>>>>>                                 on all implementations of
>>>>>>                                             os_abort(), at least on
>>>>>>                                 the UNIX variants, maybe we could
>>>>>>                                             consistently rename the
>>>>>>                                 parameters to be "siginfo" and
>>>>>>                                             "context" instead of
>>>>>>                                 using Windows terms?
>>>>>>
>>>>>>                                         Sure.
>>>>>>
>>>>>>                                             - On
>>>>>> check_create_dump_limit(), you do
>>>>>>                                 not need
>>>>>>                                 exceptionRecord, contextRecord
>>>>>>                                 parameters anymore. The
>>>>>>                                             only parameters now
>>>>>>                                 needed are buffer and buffer size,
>>>>>>                                             which is not even an
>>>>>>                                 output parameter, just a scratch
>>>>>>                                             buffer for this
>>>>>>                                 function to use for printf. For
>>>>>>                                 output, it
>>>>>>                                             calls
>>>>>> VMError::report_coredump_status(...) at
>>>>>>                                 the end to
>>>>>>                                             provide information
>>>>>>                                 about the core file.
>>>>>>
>>>>>>                                             - I would rename that
>>>>>>                                 function from
>>>>>> check_create_dump_limit() to
>>>>>>                                 check_dump_limit() - nothing
>>>>>>                                             is created anymore.
>>>>>>
>>>>>>                                         Yes, no need to carry those
>>>>>>                                 two parameters. I tried to keep
>>>>>>                                         less changes, but decided
>>>>>>                                 to change now.
>>>>>>
>>>>>>                                             - on Windows, in
>>>>>>                                 os::abort(), there is no point
>>>>>>                                 anymore in
>>>>>>                                             calling
>>>>>> VMError::report_coredump_status(...) because
>>>>>>                                 that
>>>>>>                                             information is only
>>>>>>                                 used during error log writing which
>>>>>>                                             already happened. It
>>>>>>                                 only makes sense to call this
>>>>>>                                             function in
>>>>>> check_create_dump_limit(), which
>>>>>>                                 happens
>>>>>>                                             before error log 
>>>>>> writing.
>>>>>>                                             Instead, maybe error
>>>>>>                                 messages like "Call to
>>>>>>                                 MiniDumpWriteDump() failed" should
>>>>>>                                 just be written to
>>>>>>                                             stderr? This would be
>>>>>>                                 consistent with Unix, where the OS
>>>>>>                                             writes a short message
>>>>>>                                 on stderr if core file writing 
>>>>>> fails.
>>>>>>
>>>>>>                                         Sure, will direct output to
>>>>>>                                 stderr.
>>>>>>
>>>>>>                                             - there is now a new 
>>>>>> test,
>>>>>> test/runtime/ErrorHandling/SafeFetchInErrorHandlingTest.java
>>>>>>                                             - could you please also
>>>>>>                                 add "-XX:-CreateCoredumpOnCrash" ?
>>>>>>                                             I just added the test
>>>>>>                                 and did not want to add the option
>>>>>>                                             before it was available.
>>>>>>
>>>>>>                                         OK
>>>>>>
>>>>>>                                         Thanks
>>>>>>                                         Yumin
>>>>>>
>>>>>>                                             Thanks for your work!
>>>>>>
>>>>>>                                             Thomas
>>>>>>
>>>>>>
>>>>>>                                             On Tue, Mar 17, 2015 at
>>>>>>                                 2:04 AM, Yumin Qi
>>>>>> <yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>>>>
>>>>>>                                             wrote:
>>>>>>
>>>>>>                                                 Hi, Dan and all
>>>>>>
>>>>>>                                                   I have updated
>>>>>>                                 webrev at:
>>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev03/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev03/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev03/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev03/>
>>>>>>
>>>>>>                                                   1) bug changed
>>>>>>                                 synopsis
>>>>>>                                  8074354: Make
>>>>>>                                 CreateMinidumpOnCrash a new name and
>>>>>>                                 available on all platforms
>>>>>>                                                   2) tests: JPRT,
>>>>>> vm.runtime.quick.testlist (on
>>>>>>                                             Windows), jtreg on
>>>>>>                                                 Windows and 
>>>>>> Linux/Unix.
>>>>>>
>>>>>>                                                   Thanks
>>>>>>                                                   Yumin
>>>>>>
>>>>>>
>>>>>>                                                 On 3/12/2015 12:59
>>>>>>                                 PM, Daniel D. Daugherty wrote:
>>>>>>
>>>>>>                                                     I believe there
>>>>>>                                 are both JavaTest/JTREG tests in
>>>>>>                                             the hotspot repo
>>>>>>                                                     and there are
>>>>>>                                 VM/NSK tests from back when we did
>>>>>>                                             phone home...
>>>>>>
>>>>>>                                 Check with Christian or Misha...
>>>>>>
>>>>>>                                                     Dan
>>>>>>
>>>>>>
>>>>>>                                                     On 3/12/15 1:50
>>>>>>                                 PM, Yumin Qi wrote:
>>>>>>
>>>>>>                                 Thanks, Dan
>>>>>>
>>>>>>                                 Will look at and run those tests.
>>>>>>                                 Are they
>>>>>>                                             under nsk?
>>>>>>
>>>>>>                                 Yumin
>>>>>>
>>>>>>                                 On 3/12/2015 12:29 PM, Daniel D.
>>>>>>                                 Daugherty wrote:
>>>>>>
>>>>>>                                     Yumin,
>>>>>>
>>>>>>                                     There are some error handler
>>>>>>                                 tests. You
>>>>>>                                             should find
>>>>>>                                     those and make
>>>>>>                                     sure that you run them on
>>>>>>                                 Windows since you're
>>>>>>                                     changing the order
>>>>>>                                     there...
>>>>>>
>>>>>>                                     Dan
>>>>>>
>>>>>>
>>>>>>                                     On 3/12/15 12:42 PM, Yumin Qi
>>>>>>                                 wrote:
>>>>>>
>>>>>>                                         Hi, Thomas and all
>>>>>>
>>>>>>                                            The second version of
>>>>>>                                 the change:
>>>>>>                                            webrev:
>>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev02/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev02/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev02/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev02/>
>>>>>>
>>>>>>                                            In this version:
>>>>>>                                            1) switch order on
>>>>>>                                 Windows to first
>>>>>>                                             print log
>>>>>>                                         file as other platform,
>>>>>>                                 then dump core
>>>>>>                                             file if
>>>>>>                                         needed. When VMError
>>>>>>                                 created after
>>>>>>                                             crash, siginfo
>>>>>>                                         and context which are
>>>>>>                                 ExceptionRecord and
>>>>>>                                         ContextRecord on Windows
>>>>>>                                 are recorded,
>>>>>>                                             mini (or
>>>>>>                                         full, due to 'or' used so
>>>>>>                                 type will be
>>>>>>                                             mini
>>>>>>                                         anyway) dump creates dump
>>>>>>                                 file based
>>>>>>                                             on those two
>>>>>>                                         as before.
>>>>>>                                            2) to make os::abort to
>>>>>>                                 get above
>>>>>>                                             two pointers,
>>>>>>                                         added two more fields to
>>>>>>                                 the function
>>>>>>                                             parameters:
>>>>>>                                            3)  changes for
>>>>>> test/runtime/ErrorHandling/SecondaryError.java
>>>>>>                                 ---
>>>>>>                                         added
>>>>>> "-XX:-CreateCoredumpOnCrash"
>>>>>>
>>>>>>                                             -  static void 
>>>>>> abort(bool
>>>>>>                                             dump_core = true);
>>>>>>                                            +  static void
>>>>>>                                 abort(bool dump_core
>>>>>>                                             = true,
>>>>>>                                         void *siginfo = NULL, void
>>>>>>                                 *context =
>>>>>>                                             NULL);
>>>>>>
>>>>>>                                            Tests: JPRT and manually.
>>>>>>
>>>>>>                                         Thanks
>>>>>>                                         Yumin
>>>>>>
>>>>>>                                         On 3/11/2015 3:47 AM,
>>>>>>                                 Thomas Stüfe wrote:
>>>>>>
>>>>>>                                             Hi Yumin,
>>>>>>
>>>>>>                                             There is also
>>>>>> test/runtime/ErrorHandling/SecondaryErrorTest.java
>>>>>>                                             - could you please add
>>>>>> "-XX:-CreateCoredumpOnCrash" ?
>>>>>>                                             Thank you!
>>>>>>
>>>>>>                                             Beyond that, as I wrote
>>>>>>                                 in the bug
>>>>>>                                             report
>>>>>>                                             comments:
>>>>>>
>>>>>>                                             "This is also a problem
>>>>>>                                 on Windows -
>>>>>>                                 MiniDumpWriteDump() may hang
>>>>>>                                             infinitly. And on
>>>>>>                                             Windows this is worse
>>>>>>                                 than under
>>>>>>                                             UNIX because
>>>>>>                                             we create the Dump
>>>>>>                                 before writing
>>>>>>                                             the hs-err
>>>>>>                                             file, so if the Dump
>>>>>>                                 hangs, we get
>>>>>>                                             no error
>>>>>>                                             log. I would like to
>>>>>>                                 revert the
>>>>>>                                             order: create
>>>>>>                                             the minidump after
>>>>>>                                 writing the
>>>>>>                                             error log, the
>>>>>>                                             same way Unix does it.
>>>>>>                                 We did this
>>>>>>                                             in our JVM
>>>>>>                                             (SAP) because for us,
>>>>>>                                 error logs
>>>>>>                                             are more
>>>>>>                                             useful than minidumps. "
>>>>>>
>>>>>>                                             So, I would like to see
>>>>>>                                 os::abort
>>>>>>                                             on Windows
>>>>>>                                             call
>>>>>>                                 MiniDumpWriteDump(), and thus
>>>>>>                                             the mini
>>>>>>                                             dump writing moved
>>>>>>                                 after the error log
>>>>>>                                             writing. This would
>>>>>>                                 also make the
>>>>>>                                             code way
>>>>>>                                             cleaner because the
>>>>>>                                 control flow
>>>>>>                                             would be the
>>>>>>                                             same on all platforms.
>>>>>>
>>>>>>                                             I understand that this
>>>>>>                                 may be out
>>>>>>                                             of scope for
>>>>>>                                             your change, but I
>>>>>>                                 would like to
>>>>>>                                             know what
>>>>>>                                             others think about this.
>>>>>>
>>>>>>                                             Kind regards, Thomas
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>                                             On Wed, Mar 11, 2015 at
>>>>>>                                 8:02 AM,
>>>>>>                                             Yumin Qi
>>>>>>                                 <yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>>>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>
>>>>>> <mailto:yumin.qi at oracle.com
>>>>>> <mailto:yumin.qi at oracle.com>>>>> wrote:
>>>>>>
>>>>>>                                                 Please review:
>>>>>>
>>>>>>                                                 bug:
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8074354
>>>>>>                                                 webrev:
>>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev01/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev01/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev01/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev01/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev01/>
>>>>>>
>>>>>>                                                 Summary: Tests
>>>>>>                                 timed out when
>>>>>>                                             VM crashes
>>>>>>                                             and dumping core file
>>>>>>                                                 which in the test
>>>>>>                                 case is not
>>>>>>                                             needed. To
>>>>>>                                             make core not created,
>>>>>>                                                 the fix changed
>>>>>>                                 CreateMinidumpOnCrash to
>>>>>>                                 CreateCoredumpOnCrash,
>>>>>>                                                 the former is only
>>>>>>                                 used on
>>>>>>                                             Windows and the
>>>>>>                                             latter for all
>>>>>>                                 platforms. When VM crashes on
>>>>>>                                             non Windows,
>>>>>>                                             core file generated as
>>>>>>                                                 default if OS sets
>>>>>>                                 core dump
>>>>>>                                             allowed.
>>>>>>                                             Default value of
>>>>>>                                 CreateCoredumpOnCrash set to
>>>>>>                                             'true' to
>>>>>>                                             keep same behavior on 
>>>>>> non
>>>>>>                                                 Windows platforms,
>>>>>>                                 but changed
>>>>>>                                             for Windows
>>>>>>                                             --- original is false,
>>>>>>                                                 not create 
>>>>>> minidump on
>>>>>>                                             Windows. With
>>>>>>                                 CreateCoredumpOnCrash turned
>>>>>>                                                 off, no core file
>>>>>>                                 will be
>>>>>>                                             generated.
>>>>>>                                 CreateMinidumpOnCrash still
>>>>>>                                                 can be used on
>>>>>>                                 commandline but
>>>>>>                                             only as
>>>>>>                                             alias for the new flag.
>>>>>>
>>>>>>                                                 Tests: JPRT, manual
>>>>>>                                 tests setting
>>>>>>                                 CreateMinidumpOnCrash on
>>>>>>                                 commandline to verify flag
>>>>>>                                             change as alias.
>>>>>>
>>>>>>                                                 Thanks
>>>>>>                                                 Yumin
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>



More information about the hotspot-runtime-dev mailing list