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

Thomas Stüfe thomas.stuefe at gmail.com
Thu Apr 16 06:44:11 UTC 2015


Hi all,

sorry for dropping off the last days. The last changes look fine for me. As
David said, my census name is "stuefe"

Best Regards, and @Yumin thanks for your work and perseverance!


On Thu, Apr 16, 2015 at 4:33 AM, David Holmes <david.holmes at oracle.com>
wrote:

> On 16/04/2015 4:18 AM, Daniel D. Daugherty wrote:
>
>> Yumin,
>>
>> I think Thomas made enough contributions during the review
>> cycle to count him as a (r)eviewer.
>>
>> However, it does not look like Thomas has an OpenJDK user
>>
>
> Yes he does:
>
> http://openjdk.java.net/census#stuefe
>
> David
>
>
>  name so it's more difficult.What I do in cases like that is
>> add something to this line:
>>
>> Summary: <my usual summary>; Also reviewed by thomas.stuefe at gmail.com.
>>
>> You may also choose to add Thomas to the contributed by line which
>> would look like this:
>>
>> Contributed-by: yumin.qi at oracle.com, thomas.stuefe at gmail.com
>>
>> Dan
>>
>>
>> On 4/15/15 12:08 PM, Yumin Qi wrote:
>>
>>> On 4/15/2015 11:05 AM, Yumin Qi wrote:
>>>
>>>> I need one more reviewer for push --- Thomas Stufe is not a reviewer.
>>>>
>>>>  In fact I am confused here --- Thomas is not a reviewer and not a
>>> commit-er either, so could I count him in review list.
>>>
>>>  Thanks
>>>> Yumin
>>>>
>>>> On 4/14/2015 12:40 PM, Daniel D. Daugherty wrote:
>>>>
>>>>> 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