Mercurial > hg > graal-jvmci-8
diff src/share/vm/ci/ciReplay.cpp @ 11963:1b6395189726
8012263: ciReplay: gracefully exit & report meaningful error when replay data parsing fails
Summary: find_method could return NULL so need explicitly check if there is error after parse_method, exit on error to avoid crash.
Reviewed-by: kvn, twisti
Contributed-by: yumin.qi@oracle.com
author | minqi |
---|---|
date | Fri, 19 Jul 2013 14:43:45 -0700 |
parents | f9be75d21404 |
children | c775af091fe9 |
line wrap: on
line diff
--- a/src/share/vm/ci/ciReplay.cpp Fri Jul 19 17:56:27 2013 +0200 +++ b/src/share/vm/ci/ciReplay.cpp Fri Jul 19 14:43:45 2013 -0700 @@ -299,7 +299,7 @@ Symbol* method_signature = parse_symbol(CHECK_NULL); Method* m = k->find_method(method_name, method_signature); if (m == NULL) { - report_error("can't find method"); + report_error("Can't find method"); } return m; } @@ -398,8 +398,8 @@ // compile <klass> <name> <signature> <entry_bci> <comp_level> void process_compile(TRAPS) { - // methodHandle method; Method* method = parse_method(CHECK); + if (had_error()) return; int entry_bci = parse_int("entry_bci"); const char* comp_level_label = "comp_level"; int comp_level = parse_int(comp_level_label); @@ -440,6 +440,7 @@ // void process_ciMethod(TRAPS) { Method* method = parse_method(CHECK); + if (had_error()) return; ciMethodRecord* rec = new_ciMethod(method); rec->invocation_counter = parse_int("invocation_counter"); rec->backedge_counter = parse_int("backedge_counter"); @@ -451,6 +452,7 @@ // ciMethodData <klass> <name> <signature> <state> <current mileage> orig <length> # # ... data <length> # # ... oops <length> void process_ciMethodData(TRAPS) { Method* method = parse_method(CHECK); + if (had_error()) return; /* jsut copied from Method, to build interpret data*/ if (InstanceRefKlass::owns_pending_list_lock((JavaThread*)THREAD)) { return;