test/runtime/6626217/Loader2.java

Mon, 28 Jul 2014 15:06:38 -0700

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 0
f90c822e73f8
permissions
-rw-r--r--

8051344: JVM crashed in Compile::start() during method parsing w/ UseRTMDeopt turned on
Summary: call rtm_deopt() only if there were no compilation bailouts before.
Reviewed-by: kvn

     1 import java.io.ByteArrayInputStream;
     2 import java.io.FileInputStream;
     3 public class Loader2 extends ClassLoader {
     4   int _recur;
     5   public void print( String msg ) {
     6     for( int i=0; i<_recur; i++ )
     7       System.out.print("  ");
     8     System.out.println(">>Loader2>> "+msg);
     9   }
    11   protected Class findClass2(String name) throws ClassNotFoundException {
    12     print("Fetching the implementation of "+name);
    13     int old = _recur;
    14     try {
    15       FileInputStream fi = new FileInputStream(name+".impl2");
    16       byte result[] = new byte[fi.available()];
    17       fi.read(result);
    19       print("DefineClass1 on "+name);
    20       _recur++;
    21       Class clazz = defineClass(name, result, 0, result.length);
    22       _recur = old;
    23       print("Returning newly loaded class.");
    24       return clazz;
    25     } catch (Exception e) {
    26       _recur = old;
    27       print("Not found on disk.");
    28       // If we caught an exception, either the class was not found or
    29       // it was unreadable by our process.
    30       return null;
    31       //throw new ClassNotFoundException(e.toString());
    32     }
    33   }
    35   protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException  {
    36     // Attempt a disk load first
    37     Class c = findClass2(name);
    38     if( c == null ) {
    39       // check if the class has already been loaded
    40       print("Checking for prior loaded class "+name);
    41       c = findLoadedClass(name);
    42       print("Letting super-loader load "+name);
    43       int old = _recur;
    44       _recur++;
    45       c = super.loadClass(name, false);
    46       _recur=old;
    47     }
    48     if (resolve) { print("Resolving class "+name); resolveClass(c); }
    49     print("Returning clazz "+c.getClassLoader()+":"+name);
    50     return c;
    51   }
    52 }

mercurial