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

Daniel D. Daugherty daniel.daugherty at oracle.com
Tue Apr 14 19:40:24 UTC 2015


On 4/14/15 8:42 AM, Yumin Qi wrote:
> Dan,
>
> http://cr.openjdk.java.net/~minqi/8074354/webrev08/

Thumbs up on this round.


src/share/vm/runtime/globals.hpp
     No comments.

src/share/vm/runtime/os.hpp
     No comments.

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
     No comments.

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.


Dan


> Sorry missing the comment change. Now it is done.
>
> Thanks
> Yumin
>
> On 4/14/2015 7:14 AM, Yumin Qi wrote:
>> 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