<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi Tobias,<br>
    <br>
    would it also work to check the state of the nmethod before calling
    make_zombie?<br>
    <br>
    if (nm->is_not_entrant()) {<br>
      nm->make_zombie()<br>
    }<br>
    <br>
    In any case, it would be nice the have a comment that explains why
    we should not enter a <br>
    safpoint / have to do the extra check as described above.<br>
    <br>
    Best,<br>
    Albert<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 10/07/2014 01:03 PM, Tobias Hartmann
      wrote:<br>
    </div>
    <blockquote cite="mid:5433C868.3000606@oracle.com" type="cite">
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      Hi,<br>
      <br>
      please review the following patch.<br>
      <br>
      Bug: <a moz-do-not-send="true" class="moz-txt-link-freetext"
        href="https://bugs.openjdk.java.net/browse/JDK-8059735">https://bugs.openjdk.java.net/browse/JDK-8059735</a><br>
      Webrev: <a moz-do-not-send="true" class="moz-txt-link-freetext"
        href="http://cr.openjdk.java.net/%7Ethartmann/8059735/webrev.00/">http://cr.openjdk.java.net/~thartmann/8059735/webrev.00/</a><br>
      <br>
      Problem:<br>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      In 'NMethodSweeper::process_nmethod' a non-entrant nmethod is
      processed and can be converted to zombie (line 549 of
      sweeper.cpp). To clean the IC stubs of that nmethod [1] we acquire
      the CompiledIC_lock and check for a safepoint. In this case, there
      is a safepoint request and we block. During the safepoint a
      VM_Deoptimize operation is executed (due to classloading) and the
      non-entrant nmethod is set to zombie by
      'CodeCache::make_marked_nmethods_zombies'. After the safepoint the
      sweeper continues and tries to set the nmethod to zombie again.<br>
      <br>
      Solution:<br>
      Use a MutexLockerEx with the '_no_safepoint_check_flag' to acquire
      the CompiledIC_lock.<br>
      <br>
      Testing:<br>
      - Failing tests<br>
      - JPRT<br>
      <br>
      Thanks,<br>
      Tobias<br>
      <br>
      [1] <a moz-do-not-send="true" class="moz-txt-link-freetext"
        href="https://bugs.openjdk.java.net/browse/JDK-8058737">https://bugs.openjdk.java.net/browse/JDK-8058737</a><br>
    </blockquote>
    <br>
  </body>
</html>