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

Yumin Qi yumin.qi at oracle.com
Tue Apr 14 14:14:30 UTC 2015


Dan,


   I missed your comments, so will change again. Sorry for that.
   Will update soon.

Thanks
Yumin

On 4/13/2015 10:13 PM, Yumin Qi wrote:
> Dan, Thanks.
>
> Changed to add CloseHandle(dumpFile) before all exit paths.
> Please review at same link:
>
> http://cr.openjdk.java.net/~minqi/8074354/webrev08/
>
> Yumin
>
>
> On 4/13/2015 7:04 PM, Daniel D. Daugherty wrote:
>> Yumin,
>>
>> I would prefer that the handle is properly closed on all the
>> exit paths. Not closing the handle might even trigger a future
>> Microsoft sanity check; kind of like when Microsoft added checks
>> for duplicate close() calls...
>>
>> Dan
>>
>>
>> On 4/13/15 4:05 PM, Yumin Qi wrote:
>>> Dan,
>>>
>>> On 4/13/2015 2:09 PM, Daniel D. Daugherty wrote:
>>>> On 4/13/15 10:58 AM, Yumin Qi wrote:
>>>>> Thomas,
>>>>>
>>>>>   Answers embeded below. The new web is just the same link updated 
>>>>> (08):
>>>>>
>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev08/
>>>>
>>>> src/share/vm/runtime/globals.hpp
>>>>     No comments.
>>>>
>>>> src/share/vm/runtime/os.hpp
>>>>     L720: // ON Posix compatible OS it will
>>>>         typo: 'ON' -> 'On'
>>>>
>>>>     L724: ... or a short error message, depends
>>>>         grammar: 'depends' -> 'depending'
>>>>
>>>>     L725: // on checking result.
>>>>         grammar: 'on checking' -> 'on the checking'
>>>>
>>>> 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
>>>> src/os/bsd/vm/os_bsd.cpp
>>>> src/os/linux/vm/os_linux.cpp
>>>> src/os/posix/vm/os_posix.cpp
>>>> src/os/solaris/vm/os_solaris.cpp
>>>>     No comments on the above five files.
>>>>
>>>> src/os/windows/vm/os_windows.cpp
>>>>     L1010: jio_snprintf(buffer, buffsz, "Failed to create coredump 
>>>> file (0x%x).", GetLastError());
>>>>         Because this is a Win* specific file you can use "minidump"
>>>>         here instead of "coredump".
>>>>
>>>>         I made a similar comment in the previous round.
>>>>
>>> Yes, I will change 'coredump' into 'minidump'
>>>>     L1028: if (!dump_core || !dumpFile) {
>>>>         The "!dumpFile" part is an implied boolean which we don't
>>>>         like to use in HotSpot. Perhaps: dumpFile == NULL
>>>>
>>> Will change to Hotspot style.
>>>>     L1078: win32::exit_process_or_thread(win32::EPT_PROCESS, 1);
>>>>         The "CloseHandle(dumpFile)" call is missing.
>>>>
>>> There is no need to call CloseHandle here explicitly, since we will 
>>> exit next and all resources will be reclaimed by OS. I remove it at 
>>> last since think it is not needed here. If you check previous calls to
>>>   win32::exit_process_or_thread(win32::EPT_PROCESS, 1);
>>>   I did not place CloseHandle(dumpFile) either.
>>>   If needed, I think we should put the call before all exit entry.
>>>> test/runtime/ErrorHandling/ProblematicFrameTest.java
>>>> test/runtime/ErrorHandling/SafeFetchInErrorHandlingTest.java
>>>>     No comments on the above two files.
>>>>
>>>> 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
>>>> test/runtime/Unsafe/RangeCheck.java
>>>> test/runtime/memory/ReadFromNoaccessArea.java
>>>>     No comments on the above six files.
>>> Thanks
>>> Yumin
>>>
>>>>
>>>>
>>>> Dan
>>>>
>>>>
>>>>>
>>>>>
>>>>> Thanks
>>>>> Yumin
>>>>>
>>>>> On 4/13/2015 12:30 AM, Thomas Stüfe wrote:
>>>>>> Hi Yumin,
>>>>>>
>>>>>> some small things:
>>>>>>
>>>>>> os_windows.cpp:1012
>>>>>>
>>>>>> +    if (dumpFile == INVALID_HANDLE_VALUE) {
>>>>>> +      jio_snprintf(buffer, buffsz, "Failed to create coredump 
>>>>>> file");
>>>>>> +      status = false;
>>>>>> +    }
>>>>>>
>>>>>> Please print out the error number too:
>>>>>> +      jio_snprintf(buffer, buffsz, "Failed to create coredump 
>>>>>> file (0x%x).", ::GetLastError());
>>>>>>
>>>>>>
>>>>> Changed as above. No :: global scope operator needed here.
>>>>>>
>>>>>> os_windows.cpp:1036
>>>>>>
>>>>>> +  assert(dumpFile != NULL, "dumpFile should not be NULL");
>>>>>>
>>>>>> Please remove this assert. I would not do any asserts at this 
>>>>>> stage, we are dying anyway and a recursive assert would just 
>>>>>> confuse things. Moreover, CreateFile may have failed for "normal" 
>>>>>> reasons.
>>>>>>
>>>>> removed.
>>>>>> Instead, if dumpFile is NULL, just skip the whole minidump stuff 
>>>>>> in os::abort; just behave the same way as for os::abort(false):
>>>>>>
>>>>>> +  if (!dump_core || !dumpFile) {
>>>>>> +  win32::exit_process_or_thread(win32::EPT_PROCESS, 1);
>>>>>>    }
>>>>>>
>>>>>>
>>>>> changed as expected.
>>>>>>
>>>>>> os_windows.cpp: 1076
>>>>>>
>>>>>> I would just skip the whole "FormatMessage" stuff. It is just 
>>>>>> sugar, but it will allocate buffers, which we may not want at 
>>>>>> this stage. I think the plain error code from GetLastError() is 
>>>>>> sufficient here. So I would just:
>>>>>>
>>>>>> 1076   // Older versions of dbghelp.dll (the one shipped with 
>>>>>> Win2003 for example) may not support all
>>>>>> 1077   // the dump types we really want. If first call fails, 
>>>>>> lets fall back to just use MiniDumpWithFullMemory then.
>>>>>> 1078   if (_MiniDumpWriteDump(hProcess, processId, dumpFile, 
>>>>>> dumpType, pmei, NULL, NULL) == false &&
>>>>>> 1079       _MiniDumpWriteDump(hProcess, processId, dumpFile, 
>>>>>> (MINIDUMP_TYPE)MiniDumpWithFullMemory, pmei, NULL, NULL) == false) {
>>>>>>          jio_fprintf(stderr, "Call to MiniDumpWriteDump() failed 
>>>>>> (Error 0x%x)\n", ::GetLastError());
>>>>>> 1089   } else {
>>>>>> 1090    ....
>>>>>>
>>>>>>
>>>>> Agree, this is the last step before exit, with output of last 
>>>>> error code, user can get what happened --- though a little effort 
>>>>> to research.
>>>>>
>>>>>> Rest is fine.
>>>>>> Thomas
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Apr 13, 2015 at 7:59 AM, Yumin Qi <yumin.qi at oracle.com 
>>>>>> <mailto:yumin.qi at oracle.com>> wrote:
>>>>>>
>>>>>>     Thomas and Dan,
>>>>>>
>>>>>>       Please review the changes at
>>>>>>     http://cr.openjdk.java.net/~minqi/8074354/webrev08/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev08/>
>>>>>>
>>>>>>     Thanks
>>>>>>     Yumin
>>>>>>
>>>>>>     On 4/10/2015 10:14 PM, Yumin Qi wrote:
>>>>>>
>>>>>>         Thomas,
>>>>>>
>>>>>>         Thanks for review again.
>>>>>>
>>>>>>         On 4/10/2015 4:20 AM, Thomas Stüfe wrote:
>>>>>>
>>>>>>             Hi Yumin,
>>>>>>
>>>>>>             Hi Yumin,
>>>>>>
>>>>>>             this looks mostly fine for me. I only was able to test
>>>>>>             it on Linux, but will test it on other OSes next week.
>>>>>>
>>>>>>             Here two remaining small points:
>>>>>>
>>>>>>             - in os::check_dump_limit, maybe a comment would be
>>>>>>             helpful, because the contract for this function is a
>>>>>>             bit difficult to understand. Proposal:
>>>>>>
>>>>>>             "Check or prepare a core dump to be taken at a later
>>>>>>             point in the same thread in os::abort(). Use the
>>>>>>             caller provided buffer as a scratch buffer. Output
>>>>>>             status message via VMError::report_cordedump_status()
>>>>>>             (on success, the core dump file location, on error, a
>>>>>>             short error message) - this status message which will
>>>>>>             be written into the error log."
>>>>>>
>>>>>>         I will take the comments, new comments:
>>>>>>
>>>>>>           // ON Posix compatible OS it will simply check core dump
>>>>>>         limits while on Windows
>>>>>>           // it will check if dump file can be created. Check or
>>>>>>         prepare a core dump to be
>>>>>>           // taken at a later point in the same thread in
>>>>>>         os::abort(). Use the caller
>>>>>>           // provided buffer as a scratch buffer. The status
>>>>>>         message which will be written
>>>>>>           // into the error log either is file location or a short
>>>>>>         error message, depends
>>>>>>           // on checking result.
>>>>>>           static void check_dump_limit(char* buffer, size_t
>>>>>>         bufferSize);
>>>>>>
>>>>>>             - It would make sense to improve the output in
>>>>>>             VMError.report() in STEP(63) a bit:
>>>>>>
>>>>>>             Problem 1: we use past-tense, which is misleading
>>>>>>             ("Core dump written", "Failed to write core"). We did
>>>>>>             not generate the core dump yet, we just plan to do it,
>>>>>>             and it still may fail for various reasons (e.g. even
>>>>>>             if the limits are fine, the current directory may be
>>>>>>             write protected. There is no way to catch all errors
>>>>>>             beforehand). If the user reads "Core dump written", he
>>>>>>             assumes the core dump was written successfully. If
>>>>>>             abort(3) later fails to write the core dump, user will
>>>>>>             be confused.
>>>>>>
>>>>>>         Will change the message to
>>>>>>               if (coredump_status) {
>>>>>>                 st->print("Core dump will be written. %s",
>>>>>>         coredump_message);
>>>>>>               } else {
>>>>>>                 st->print("No core dump will be written. %s",
>>>>>>         coredump_message);
>>>>>>               }
>>>>>>
>>>>>>         as your suggested.
>>>>>>         Whether the coredump can be successfully created depends
>>>>>>         on following core file generation procedure. User can
>>>>>>         trace error messages if failed to create.
>>>>>>
>>>>>>             Problem 2: this is more obscure: on Linux core dumps
>>>>>>             may not be written to the file system at all but be
>>>>>>             processed by some other program. On my Ubuntu 14.4
>>>>>>             machine I see this output:
>>>>>>
>>>>>>             #
>>>>>>             # Core dump written. Default location: Core dumps may
>>>>>>             be processed with "/usr/share/apport/apport %p %s %c
>>>>>>             %P" (or dumping to
>>>>>> /shared/projects/openjdk/jdk9-hs-rt/output/core.26261)
>>>>>>             #
>>>>>>
>>>>>>             This output is a bit jarring.
>>>>>>
>>>>>>         I have not tested on Ubuntu so no comments.
>>>>>>
>>>>>>         I will post a new webrev based on your and Dan's comments.
>>>>>>         Thanks for your patience.
>>>>>>
>>>>>>         Thanks
>>>>>>         Yumin
>>>>>>
>>>>>>             My suggestion for better texts would be:
>>>>>>
>>>>>>             "Core dump will be written. %s"
>>>>>>             "No core dump will be written. %s"
>>>>>>
>>>>>>             which hopefully fits all cases better. But I don't
>>>>>>             know, other suggestions are welcome :-)
>>>>>>
>>>>>>             Otherwise, this looks fine.
>>>>>>
>>>>>>             Thanks for your work!
>>>>>>
>>>>>>             Thomas
>>>>>>
>>>>>>
>>>>>>             On Fri, Apr 10, 2015 at 5:18 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>>> wrote:
>>>>>>
>>>>>>                 Hi, Thomas and Dan
>>>>>>
>>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev07/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev07/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/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/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev07/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/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>
>>>>>>             <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
>>>>>>
>>>>>>                                   New webrev at
>>>>>> http://cr.openjdk.java.net/~minqi/8074354/webrev07/
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/8074354/webrev07/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/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/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/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>
>>>>>>             <mailto:daniel.daugherty at oracle.com
>>>>>> <mailto:daniel.daugherty at oracle.com>>
>>>>>>             <mailto:daniel.daugherty at oracle.com
>>>>>>             <mailto:daniel.daugherty at oracle.com>
>>>>>>             <mailto: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/>
>>>>>> <http://cr.openjdk.java.net/%7Eminqi/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,
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>



More information about the hotspot-runtime-dev mailing list