RFR(xs): [windows] small fixes to os::check_heap()

David Holmes david.holmes at oracle.com
Fri Nov 20 06:38:03 UTC 2015


This all seems fine. If we can get a second reviewer I will sponsor the 
push.

Thanks,
David

On 20/11/2015 11:24 AM, David Holmes wrote:
> On 19/11/2015 8:04 PM, Thomas Stüfe wrote:
>> On Thu, Nov 19, 2015 at 10:04 AM, David Holmes <david.holmes at oracle.com
>> <mailto:david.holmes at oracle.com>> wrote:
>>
>>     On 19/11/2015 6:25 PM, Thomas Stüfe wrote:
>>
>>         Hi David,
>>
>>         On Thu, Nov 19, 2015 at 8:49 AM, David Holmes
>>         <david.holmes at oracle.com <mailto:david.holmes at oracle.com>
>>         <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>>> wrote:
>>
>>              Hi Thomas,
>>
>>              On 19/11/2015 4:52 PM, Thomas Stüfe wrote:
>>
>>                  Hi David,
>>
>>                  On Thu, Nov 19, 2015 at 4:56 AM, David Holmes
>>                  <david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com> <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>>
>>                  <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>
>>
>>                  <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>>>> wrote:
>>
>>                       Hi Thomas,
>>
>>                       On 19/11/2015 2:40 AM, Thomas Stüfe wrote:
>>
>>                           Hi all,
>>
>>                           could you please sponsor and review these tiny
>>         changes to
>>                           os::check_heap()
>>                           on windows:
>>
>>                           webrev:
>>
>> http://cr.openjdk.java.net/~stuefe/webrevs/8143233/webrev.00/webrev/
>>                           bug:
>>         https://bugs.openjdk.java.net/browse/JDK-8143233?filter=22798
>>
>>                           Fixes two issues:
>>                           - GetProcessHeap() is not necessarily the CRT
>>         heap, so
>>                  we need
>>                           to use
>>                           _get_heap_handle(); instead
>>
>>
>>                       I'm unclear why we want the CRT heap as opposed
>> to the
>>                  process heap?
>>
>>
>>                  os::check_heap is used in a context that lets me assume
>>         that the CRT
>>                  heap is meant (e.g. in os::malloc, os::realloc,
>>         triggered by
>>                  MallocVerifyInterval
>>
>>
>> <http://ld8443:8080/source/s?defs=MallocVerifyInterval&project=integ-hotspot>).
>>
>>                  Also, we do not explicitly use the Process Default
>> Heap, so
>>                  there is no
>>                  use in checking it.
>>
>>                       But in any case according to this as of VS2012 the
>>         CRT heap and
>>                       process default heap are the same:
>>
>>
>> http://stackoverflow.com/questions/18955871/why-does-get-heap-handle-equal-to-getprocessheap
>>
>>
>>
>>                  True, but
>>                  1) we still support VS 2010
>>
>>
>> (https://wiki.openjdk.java.net/display/Build/Supported+Build+Platforms)
>>
>>
>>              Wasn't aware of that :)
>>
>>                  2) arguably, use of _get_heap_handle() better
>> documents the
>>                  intent here
>>                  3) Microsoft may decide at some point to switch back
>> to a
>>                  separate heap
>>                  for the CRT instead of using the process default heap.
>>
>>
>>              Okay. Only issue I have is actually testing the change. I
>>         don't see
>>              that we currently have any jtreg tests that exercise this
>> heap
>>              checking :( Did I miss something?
>>
>>
>>         I did not find anything. This is also difficult to test, because
>>         heap
>>         overwriters are difficult to trigger in a way that they destroy
>>         the CRT
>>         heap structures just enough to trigger an error in WalkHeap.
>>
>>         But we added this fix a while ago to our code base and I
>>         remember that I
>>         did test it then. I am quite convinced that it actually worked
>>         because
>>         after I swapped GetProcessHeap with _get_heap_handle(), I got
>> real
>>         errors, hit the fatal(), and only then detected that I better
>>         add the
>>         HeapUnlock() to prevent deadlocks when VMError::report_and_die()
>>         does
>>         malloc().
>>
>>         But if you insist, I could invest a bit of time to at least
>> manually
>>         test the change.
>>
>>
>>     I don't need a test that actually corrupts the heap and verifies
>>     that this detects it. I just want something that will actually run
>>     the code being changed. I'll see if we have anything internally.
>>
>>
>> -XX:+VerifyBeforeExit causes the VmThread to execute os::check_heap on
>> shutdown. I tried to test it and to step thru with VS2010, but have some
>> problems debugging the libjvm. I will take a closer look later.
>
> Ah yes! And that is trueInDebug, so in fact this is always being tested!
> Okay.
>
> No need for any additional tests in that case. I'll take the patch and
> test it out internally.
>
> Thanks,
> David
>
>
>> Maybe a Whitebox Test would be the right thing to do, or would that be
>> overdone?
>>
>> Kind Regards, Thomas
>>
>>     Thanks,
>>     David
>>
>>
>>         Kind regards, Thomas
>>
>>              Thanks,
>>              David
>>
>>
>>
>>                  Regards, Thomas
>>
>>                           - We need to always unlock the heap before
>>         exiting with
>>                  fatal()
>>                           in case we
>>                           found an error.
>>
>>
>>                       Ok.
>>
>>                       Thanks,
>>                       David
>>
>>                           Kind Regards, Thomas
>>
>>
>>
>>


More information about the hotspot-runtime-dev mailing list