Mercurial > hg > truffle
comparison src/share/vm/runtime/thread.hpp @ 20705:d3f3f7677537
6898462: The escape analysis with G1 cause crash assertion src/share/vm/runtime/vframeArray.cpp:94
Summary: OOM during reallocation of scalar replaced objects in deoptimization causes crashes
Reviewed-by: kvn, jrose
author | roland |
---|---|
date | Tue, 25 Nov 2014 17:33:59 +0100 |
parents | b12a2a9b05ca |
children | 7848fc12602b |
comparison
equal
deleted
inserted
replaced
20704:8c08b28b7eee | 20705:d3f3f7677537 |
---|---|
931 | 931 |
932 // JVMTI PopFrame support | 932 // JVMTI PopFrame support |
933 // This is set to popframe_pending to signal that top Java frame should be popped immediately | 933 // This is set to popframe_pending to signal that top Java frame should be popped immediately |
934 int _popframe_condition; | 934 int _popframe_condition; |
935 | 935 |
936 // If reallocation of scalar replaced objects fails, we throw OOM | |
937 // and during exception propagation, pop the top | |
938 // _frames_to_pop_failed_realloc frames, the ones that reference | |
939 // failed reallocations. | |
940 int _frames_to_pop_failed_realloc; | |
941 | |
936 #ifndef PRODUCT | 942 #ifndef PRODUCT |
937 int _jmp_ring_index; | 943 int _jmp_ring_index; |
938 struct { | 944 struct { |
939 // We use intptr_t instead of address so debugger doesn't try and display strings | 945 // We use intptr_t instead of address so debugger doesn't try and display strings |
940 intptr_t _target; | 946 intptr_t _target; |
1583 bool pop_frame_in_process(void) { return ((_popframe_condition & popframe_processing_bit) != 0); } | 1589 bool pop_frame_in_process(void) { return ((_popframe_condition & popframe_processing_bit) != 0); } |
1584 void set_pop_frame_in_process(void) { _popframe_condition |= popframe_processing_bit; } | 1590 void set_pop_frame_in_process(void) { _popframe_condition |= popframe_processing_bit; } |
1585 void clr_pop_frame_in_process(void) { _popframe_condition &= ~popframe_processing_bit; } | 1591 void clr_pop_frame_in_process(void) { _popframe_condition &= ~popframe_processing_bit; } |
1586 #endif | 1592 #endif |
1587 | 1593 |
1594 int frames_to_pop_failed_realloc() const { return _frames_to_pop_failed_realloc; } | |
1595 void set_frames_to_pop_failed_realloc(int nb) { _frames_to_pop_failed_realloc = nb; } | |
1596 void dec_frames_to_pop_failed_realloc() { _frames_to_pop_failed_realloc--; } | |
1597 | |
1588 private: | 1598 private: |
1589 // Saved incoming arguments to popped frame. | 1599 // Saved incoming arguments to popped frame. |
1590 // Used only when popped interpreted frame returns to deoptimized frame. | 1600 // Used only when popped interpreted frame returns to deoptimized frame. |
1591 void* _popframe_preserved_args; | 1601 void* _popframe_preserved_args; |
1592 int _popframe_preserved_args_size; | 1602 int _popframe_preserved_args_size; |