< prev index next >

test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/StressClassLoadingTest.java

Print this page
rev 53736 : 8195060: vm/mlvm/anonloader/stress/byteMutation intermittently times out
Reviewed-by: duke
   1 /*
   2  * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */


 152                 // Write out the class file being loaded.  It's useful
 153                 // to have if the JVM crashes.
 154                 FileUtils.writeBytesToFile(rescueFile, classBytes);
 155                 if (classFileMessagePrinted.compareAndSet(false, true)) {
 156                     Env.traceImportant("If the JVM crashes then "
 157                             + "the class file causing the crash is saved as *_*_"
 158                             + RESCUE_FILE_NAME);
 159                 }
 160             }
 161 
 162             Thread parserThread  = new Thread() {
 163                 public void run() {
 164                     try {
 165                         Class<?> c;
 166                         if (unsafeLoad) {
 167                             c = UnsafeAccess.unsafe.defineAnonymousClass(hostClass, classBytes, null);
 168                         } else {
 169                             c = CustomClassLoaders.makeClassBytesLoader(classBytes, className)
 170                                     .loadClass(className);
 171                         }
 172                         c.newInstance();
 173                     } catch (Throwable e) {
 174                         Env.traceVerbose(e, "parser caught exception");
 175                     }
 176                 }
 177             };
 178 
 179             parserThread.setDaemon(true);
 180             parserThread.start();
 181             parserThread.join(parseTimeout);
 182 
 183             if (parserThread.isAlive()) {
 184                 Env.complain("Killing parser thread");
 185                 StackTraceElement[] stack = parserThread.getStackTrace();
 186                 Env.traceImportant(parserThread + " stack trace:");
 187                 for (int i = 0; i < stack.length; ++i) {
 188                     Env.traceImportant(parserThread + "\tat " + stack[i]);
 189                 }
 190 
 191                 if (saveClassFile) {
 192                     Files.move(rescueFile.toPath(), Paths.get(fileNamePrefix


   1 /*
   2  * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */


 152                 // Write out the class file being loaded.  It's useful
 153                 // to have if the JVM crashes.
 154                 FileUtils.writeBytesToFile(rescueFile, classBytes);
 155                 if (classFileMessagePrinted.compareAndSet(false, true)) {
 156                     Env.traceImportant("If the JVM crashes then "
 157                             + "the class file causing the crash is saved as *_*_"
 158                             + RESCUE_FILE_NAME);
 159                 }
 160             }
 161 
 162             Thread parserThread  = new Thread() {
 163                 public void run() {
 164                     try {
 165                         Class<?> c;
 166                         if (unsafeLoad) {
 167                             c = UnsafeAccess.unsafe.defineAnonymousClass(hostClass, classBytes, null);
 168                         } else {
 169                             c = CustomClassLoaders.makeClassBytesLoader(classBytes, className)
 170                                     .loadClass(className);
 171                         }
 172                         UnsafeAccess.unsafe.ensureClassInitialized(c);
 173                     } catch (Throwable e) {
 174                         Env.traceVerbose(e, "parser caught exception");
 175                     }
 176                 }
 177             };
 178 
 179             parserThread.setDaemon(true);
 180             parserThread.start();
 181             parserThread.join(parseTimeout);
 182 
 183             if (parserThread.isAlive()) {
 184                 Env.complain("Killing parser thread");
 185                 StackTraceElement[] stack = parserThread.getStackTrace();
 186                 Env.traceImportant(parserThread + " stack trace:");
 187                 for (int i = 0; i < stack.length; ++i) {
 188                     Env.traceImportant(parserThread + "\tat " + stack[i]);
 189                 }
 190 
 191                 if (saveClassFile) {
 192                     Files.move(rescueFile.toPath(), Paths.get(fileNamePrefix


< prev index next >