<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi,<br>
    <br>
    please review the following patch.<br>
    <br>
    Bug: <a 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 class="moz-txt-link-freetext" href="http://cr.openjdk.java.net/~thartmann/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 class="moz-txt-link-freetext" href="https://bugs.openjdk.java.net/browse/JDK-8058737">https://bugs.openjdk.java.net/browse/JDK-8058737</a><br>
  </body>
</html>