summaryrefslogtreecommitdiffstats
path: root/runtime/quick_exception_handler.h
diff options
context:
space:
mode:
authorSebastien Hertz <shertz@google.com>2014-04-28 15:03:08 +0200
committerSebastien Hertz <shertz@google.com>2014-04-29 09:04:18 +0200
commit714f175bd66d03225927a84f3d5dbc923c5a3e7e (patch)
tree093c8564827484af598bd116c7560b1893910e3d /runtime/quick_exception_handler.h
parentd55e9b1a9f45c19cd7b376a8839ce37f86c66a64 (diff)
downloadart-714f175bd66d03225927a84f3d5dbc923c5a3e7e.tar.gz
art-714f175bd66d03225927a84f3d5dbc923c5a3e7e.tar.bz2
art-714f175bd66d03225927a84f3d5dbc923c5a3e7e.zip
Visit deoptimized shadow frames as roots
During deoptimization, we create shadow frames but do not attach them to the stack until we transition to interpreter mode. If a GC happens before that, these shadow frames are not visited by GC so they may contain stale references. This CL addresses this issue by visiting the shadow frames "under contruction" in Thread::VisitRoots so we correctly update all references they hold. To make them visible, we now save the top shadow frame (the first one created) in the field Thread::tls_ptr_sized_values::deoptimization_shadow_frame. This field will then be cleared when transitioning to interpreter mode. Bug: 14324885 Change-Id: Ib213ddc80f19cfcdfcec6f20acaa7f1a0e9ce2c1
Diffstat (limited to 'runtime/quick_exception_handler.h')
-rw-r--r--runtime/quick_exception_handler.h6
1 files changed, 0 insertions, 6 deletions
diff --git a/runtime/quick_exception_handler.h b/runtime/quick_exception_handler.h
index d06ce7c632..ef3766c0a6 100644
--- a/runtime/quick_exception_handler.h
+++ b/runtime/quick_exception_handler.h
@@ -66,10 +66,6 @@ class QuickExceptionHandler {
clear_exception_ = clear_exception;
}
- void SetTopShadowFrame(ShadowFrame* top_shadow_frame) {
- top_shadow_frame_ = top_shadow_frame;
- }
-
void SetHandlerFrameId(size_t frame_id) {
handler_frame_id_ = frame_id;
}
@@ -88,8 +84,6 @@ class QuickExceptionHandler {
uint32_t handler_dex_pc_;
// Should the exception be cleared as the catch block has no move-exception?
bool clear_exception_;
- // Deoptimization top shadow frame.
- ShadowFrame* top_shadow_frame_;
// Frame id of the catch handler or the upcall.
size_t handler_frame_id_;