Prepared by: | twisti on Wed Oct 19 08:37:12 PDT 2011 |
---|---|
Workspace: | /home/twisti/hsx/hotspot-comp/7090904 |
Compare against: | /home/twisti/hsx/hotspot-comp/hotspot |
Summary of changes: | 61 lines changed: 37 ins; 7 del; 17 mod; 12870 unchg |
Patch of changes: | 7090904.patch |
Printable review: | 7090904.pdf |
Author comments: |
7090904: JSR 292: JRuby junit test crashes in PSScavengeRootsClosure::do_oop Reviewed-by: A couple of JRuby junit tests crash in various forms (mostly GC related) when running on 64-bit Linux. Although it looks like a GC related problem it actually is a deoptimization bug. Tom already had a fix ready but we were unable to write a test case to prove the correctness of the fix. An assert added in AbstractInterpreter::layout_activation shows that the JRuby crashes are indeed an incarnation of this deoptimization bug. The bug itself is in the deoptimization logic that calculates the size of parameter space in the caller frame. Method handle invokes may involve fairly arbitrary chains of calls so it's impossible to know how much actual space the caller has for locals. The fix is to always assume zero parameters for method handle call sites. Extensive testing with JRuby junit tests. |
Bug id: | 7090904 JSR 292: JRuby junit test crashes in PSScavengeRootsClosure::do_oop |
Legend: |
Modified file Deleted file New file |
Cdiffs
Udiffs
Wdiffs
Sdiffs
Frames
Old
New
Patch
Raw
src/share/vm/runtime/deoptimization.cpp
21 lines changed: 8 ins; 3 del; 10 mod; 1946 unchg
Cdiffs
Udiffs
Wdiffs
Sdiffs
Frames
Old
New
Patch
Raw
src/cpu/x86/vm/templateInterpreter_x86_32.cpp
6 lines changed: 6 ins; 0 del; 0 mod; 1937 unchg
Cdiffs
Udiffs
Wdiffs
Sdiffs
Frames
Old
New
Patch
Raw
src/cpu/x86/vm/templateInterpreter_x86_64.cpp
6 lines changed: 6 ins; 0 del; 0 mod; 1977 unchg
Cdiffs
Udiffs
Wdiffs
Sdiffs
Frames
Old
New
Patch
Raw
src/share/vm/interpreter/bytecodeTracer.cpp
1 line changed: 0 ins; 0 del; 1 mod; 582 unchg
Cdiffs
Udiffs
Wdiffs
Sdiffs
Frames
Old
New
Patch
Raw
src/share/vm/runtime/frame.cpp
25 lines changed: 17 ins; 4 del; 4 mod; 1483 unchg
Cdiffs
Udiffs
Wdiffs
Sdiffs
Frames
Old
New
Patch
Raw
src/share/vm/runtime/frame.hpp
1 line changed: 0 ins; 0 del; 1 mod; 552 unchg
Cdiffs
Udiffs
Wdiffs
Sdiffs
Frames
Old
New
Patch
Raw
src/share/vm/runtime/thread.cpp
1 line changed: 0 ins; 0 del; 1 mod; 4393 unchg
This code review page was prepared using /home/twisti/bin/webrev (vers 23.18-hg-never).