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

David Holmes david.holmes at oracle.com
Mon Nov 23 21:55:44 UTC 2015


Ping! Second reviewer please!

Thanks
David

On 20/11/2015 4:38 PM, David Holmes wrote:
> 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