changeset 5826:958eaa191b79 lambda-b50

Fix Hotspot SIGSEGV caused by boot loader ProtectionDomain on Unsafe.defineClass
author Robert Field <Robert.Field@oracle.com>
date Thu, 26 Jul 2012 17:00:42 -0700
parents 1e58e328a230
children 2fd2a7092fe1
files src/share/classes/java/lang/invoke/InnerClassGenerator.java
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/lang/invoke/InnerClassGenerator.java	Thu Jul 26 12:05:16 2012 -0700
+++ b/src/share/classes/java/lang/invoke/InnerClassGenerator.java	Thu Jul 26 17:00:42 2012 -0700
@@ -31,6 +31,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.lang.reflect.Method;
+import java.security.ProtectionDomain;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -323,7 +324,10 @@
                 Logger.getLogger(InnerClassGenerator.class.getName()).log(Level.SEVERE, null, ex);
             }
         }
-        return (Class <? extends T>) unsafe.defineClass(wrapperName, classBytes, 0, classBytes.length, targetClass.getClassLoader(), targetClass.getProtectionDomain());
+        
+        ClassLoader loader = targetClass.getClassLoader();
+        ProtectionDomain pd = (loader == null)? null : targetClass.getProtectionDomain();
+        return (Class <? extends T>) unsafe.defineClass(wrapperName, classBytes, 0, classBytes.length, loader, pd);
     }
     
     /**