You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/08/24 17:32:02 UTC

svn commit: r569421 - in /harmony/enhanced/drlvm/trunk: src/test/regression/H4654/ src/test/regression/H4654/OOMEPrintStackTrace.java src/test/regression/H4654/Test.java vm/vmcore/src/init/vm_init.cpp

Author: gshimansky
Date: Fri Aug 24 08:32:01 2007
New Revision: 569421

URL: http://svn.apache.org/viewvc?rev=569421&view=rev
Log:
Applied patch from HARMONY-4654
[drlvm][classloader][init] assertion on OOME class is not initialized


Added:
    harmony/enhanced/drlvm/trunk/src/test/regression/H4654/
    harmony/enhanced/drlvm/trunk/src/test/regression/H4654/OOMEPrintStackTrace.java   (with props)
    harmony/enhanced/drlvm/trunk/src/test/regression/H4654/Test.java   (with props)
Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp

Added: harmony/enhanced/drlvm/trunk/src/test/regression/H4654/OOMEPrintStackTrace.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H4654/OOMEPrintStackTrace.java?rev=569421&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H4654/OOMEPrintStackTrace.java (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H4654/OOMEPrintStackTrace.java Fri Aug 24 08:32:01 2007
@@ -0,0 +1,27 @@
+package org.apache.harmony.drlvm.tests.regression.h4654;
+
+/**
+ * Tests that VM doesn't crash in printStackTrace() for OOME.
+ */
+
+public class OOMEPrintStackTrace {
+
+    public static void main(String[] args) {
+        int size = 1;
+
+        try {
+            for (int i = 0; 0 < 10; i++) {
+                System.out.println("Allocating 10^" + i + " longs...");
+                long[] b = new long[size];
+                size *= 10;
+            }
+        } catch (OutOfMemoryError e) {
+            printStackTrace(e);
+        }
+    }
+
+    static public void printStackTrace(Throwable e) {
+        e.printStackTrace();
+    }
+
+}

Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H4654/OOMEPrintStackTrace.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/src/test/regression/H4654/Test.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H4654/Test.java?rev=569421&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H4654/Test.java (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H4654/Test.java Fri Aug 24 08:32:01 2007
@@ -0,0 +1,72 @@
+package org.apache.harmony.drlvm.tests.regression.h4654;
+
+import java.io.File;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+import junit.framework.TestCase;
+
+/**
+ * Tests that VM doesn't crash in printStackTrace() for OOME.
+ * Runs VM in child process for the 'TestClass' and checks that it doesn't
+ * crash and returns zero exitValue.
+ * Child process for the test application is required because crash didn't
+ * reproduce in junit test (main class derived from junit.framework.TestCase).
+ */
+public class Test extends TestCase {
+
+    final static String testClass =
+       "org.apache.harmony.drlvm.tests.regression.h4654.OOMEPrintStackTrace";
+
+    public static void main(String[] args) {
+        (new Test()).test();
+    }
+
+    public void test() {
+        ProcessBuilder pb = new ProcessBuilder(
+            System.getProperty("java.home") + File.separator + "bin" +
+                    File.separator+"java",
+            "-XX:vm.assert_dialog=false",
+            "-cp",
+            System.getProperty("java.class.path"),
+            testClass
+        );
+
+        // merge stderr adn stdout for child VM process
+        pb.redirectErrorStream(true);
+
+        System.out.println("Command line for child VM:");
+
+        for (String arg : pb.command()) {
+            System.out.println("  " + arg);
+        }
+
+        int exitValue = -1;
+
+        try {
+            System.out.println("Launching child VM...");
+            Process p = pb.start();
+            System.out.println("Child VM started.");
+
+            BufferedReader childOut = new BufferedReader(new InputStreamReader(
+                    p.getInputStream()));
+
+            BufferedReader childErr = new BufferedReader(new InputStreamReader(
+                    p.getErrorStream()));
+
+            String outLine;
+
+            while (null != (outLine = childOut.readLine())) {
+                System.out.println("child-out>   " + outLine);
+            }
+
+            System.out.println("Waiting for child VM process to finish...");
+
+            exitValue = p.waitFor();
+            System.out.println("Child VM finished. Exit value = " + exitValue);
+        } catch (Throwable exc) {
+            exc.printStackTrace();
+        }
+
+        assertTrue(exitValue == 0);
+    }
+}

Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H4654/Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp?rev=569421&r1=569420&r2=569421&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp Fri Aug 24 08:32:01 2007
@@ -758,6 +758,7 @@
     vm_env->java_lang_Object->object =
         class_alloc_new_object(vm_env->JavaLangObject_Class);    
     // Create java.lang.OutOfMemoryError.
+    class_initialize(vm_env->java_lang_OutOfMemoryError_Class);
     vm_env->java_lang_OutOfMemoryError = oh_allocate_global_handle();
     vm_env->java_lang_OutOfMemoryError->object = 
         class_alloc_new_object(vm_env->java_lang_OutOfMemoryError_Class);