8041959: Skip replay parsing errors with ReplayIgnoreInitErrors
authorkvn
Tue, 29 Apr 2014 10:29:56 -0700
changeset 24324 e18584aa83e2
parent 24323 f84b15cd9e1a
child 24325 7a1b3799b906
8041959: Skip replay parsing errors with ReplayIgnoreInitErrors Summary: Allow replay compilation with replay file parsing error. Reviewed-by: twisti, iveresov
hotspot/src/share/vm/ci/ciReplay.cpp
hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp
--- a/hotspot/src/share/vm/ci/ciReplay.cpp	Tue Apr 29 07:14:46 2014 +0000
+++ b/hotspot/src/share/vm/ci/ciReplay.cpp	Tue Apr 29 10:29:56 2014 -0700
@@ -376,11 +376,15 @@
     int c = getc(_stream);
     while(c != EOF) {
       c = get_line(c);
-      process_command(CHECK);
+      process_command(THREAD);
       if (had_error()) {
         tty->print_cr("Error while parsing line %d: %s\n", line_no, _error_message);
-        tty->print_cr("%s", _buffer);
-        return;
+        if (ReplayIgnoreInitErrors) {
+          CLEAR_PENDING_EXCEPTION;
+          _error_message = NULL;
+        } else {
+          return;
+        }
       }
       line_no++;
     }
@@ -565,10 +569,14 @@
   void process_ciMethodData(TRAPS) {
     Method* method = parse_method(CHECK);
     if (had_error()) return;
-    /* jsut copied from Method, to build interpret data*/
+    /* just copied from Method, to build interpret data*/
     if (InstanceRefKlass::owns_pending_list_lock((JavaThread*)THREAD)) {
       return;
     }
+    // To be properly initialized, some profiling in the MDO needs the
+    // method to be rewritten (number of arguments at a call for
+    // instance)
+    method->method_holder()->link_class(CHECK);
     // methodOopDesc::build_interpreter_method_data(method, CHECK);
     {
       // Grab a lock here to prevent multiple
--- a/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp	Tue Apr 29 07:14:46 2014 +0000
+++ b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp	Tue Apr 29 10:29:56 2014 -0700
@@ -192,6 +192,10 @@
       thread->is_interp_only_mode()) {
     return NULL;
   }
+  if (CompileTheWorld || ReplayCompiles) {
+    // Don't trigger other compiles in testing mode
+    return NULL;
+  }
   nmethod *osr_nm = NULL;
 
   handle_counter_overflow(method());