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

Yumin Qi yumin.qi at oracle.com
Mon Apr 13 16:58:01 UTC 2015


Thomas,

   Answers embeded below. The new web is just the same link updated (08):

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


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