<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <br>
    <div class="moz-cite-prefix">On 11/23/13 2:58 PM, Srinivas
      Ramakrishna wrote:<br>
    </div>
    <blockquote
cite="mid:CABzyjynYAQHDsybSeJSUb7ag+CX0LWH=4gKOxYLCrjaDqJmD1g@mail.gmail.com"
      type="cite">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <br>
          <div class="gmail_quote">On Fri, Nov 22, 2013 at 11:01 PM, Jon
            Masamitsu <span dir="ltr"><<a moz-do-not-send="true"
                href="mailto:jon.masamitsu@oracle.com" target="_blank">jon.masamitsu@oracle.com</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm
              withdrawing this review request until further notice.</blockquote>
            <div><br>
              <br>
            </div>
            <div>Jon, I know you withdrew to give this further thought,
              but IIRC, the thing to do here might be<br>
              to record the return as a split birth, rather than to fix
              up the split death.<br>
            </div>
            <div>At least that was my mental model for the demand
              tracking.<br>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    Missed this somehow in my mail box.<br>
    <br>
    I agree it would be nice to keep the census update near the<br>
    code that removed the chunk from the dictionary but I was<br>
    confused about what to do.<br>
    <br>
    I wanted to undo a split-death so adding a coal-birth seemed<br>
    like the thing to do but at the point at which the chunk is<br>
    being added back, putting in a coal-birth looked wrong <br>
    because there really wasn't any coalescing being done.  I could<br>
    see myself coming back to that code next week and <br>
    wondering why the heck I was adding a coal-birth.  And<br>
    when I thought about it, the split-death wasn't right either<br>
    since I didn't really know what went on in get_chunk() for<br>
    an "atLeast" policy.  In the end I decided two wrongs<br>
    don't make a right :-), so did the census update when<br>
    I new what was actually being done.  It seemed simpler<br>
    to me.<br>
    <br>
    If I was going to fix it, I would add a method <br>
    get_chunk_and_update_census() that would <br>
    know how to correctly update the census.<br>
    <br>
    Jon<br>
    <br>
    <blockquote
cite="mid:CABzyjynYAQHDsybSeJSUb7ag+CX0LWH=4gKOxYLCrjaDqJmD1g@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div><br>
            </div>
            <div>Will look at yr changes when you provide a new webrev.
              At this time I only read yr descripition below, but<br>
              did not look at the webrev.<br>
              <br>
            </div>
            <div>thanks!<br>
            </div>
            <div>-- ramki<br>
              <br>
            </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div class="HOEnZb">
                <div class="h5">
                  <br>
                  <br>
                  On 11/22/2013 5:54 PM, Jon Masamitsu wrote:<br>
                  <blockquote class="gmail_quote" style="margin:0 0 0
                    .8ex;border-left:1px #ccc solid;padding-left:1ex">
                    8026303: CMS: JVM intermittently crashes with
                    "FreeList of size 258 violates Con<br>
                    servation Principle" assert<br>
                    <br>
                    CompactibleFreeListSpace:: par_get_chunk_of_blocks()
                    replenishes<br>
                    the free list of a given size by splitting a larger
                    chunk. The code<br>
                    searched for a block that was large enough to split.
                    If a large enough<br>
                    chunk was found it was removed from the dictionary
                    and a split death<br>
                    was recorded. If the remainder after splitting would
                    be too small, that<br>
                    block was returned to the dictionary but forgot to
                    fix the split death<br>
                    accounting<br>
                    <br>
                    The fix was to move the split death accounting to
                    the point where<br>
                    it was known that the chunk would not be put back
                    into the dictionary.<br>
                    There was also code moved which did the accounting
                    for the<br>
                    _unallocated_block (updated it to account for the
                    allocation which<br>
                    could change _unallocated_block).<br>
                    <br>
                    The fix<br>
                    <br>
                    <a moz-do-not-send="true"
                      href="http://cr.openjdk.java.net/%7Ejmasa/8026303/webrev.00/"
                      target="_blank">http://cr.openjdk.java.net/~jmasa/8026303/webrev.00/</a><br>
                    <br>
                    A small amount of code refactoring was done and is
                    in<br>
                    a second webrev (along with the fix above).  Both
                    changes<br>
                    will be put back together.<br>
                    <br>
                    <a moz-do-not-send="true"
                      href="http://cr.openjdk.java.net/%7Ejmasa/8026303/webrev_cleanup.00/"
                      target="_blank">http://cr.openjdk.java.net/~jmasa/8026303/webrev_cleanup.00/</a><br>
                    <br>
                    Thanks.<br>
                    <br>
                    Jon<br>
                    <br>
                    <br>
                    <br>
                  </blockquote>
                  <br>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>