comparison src/share/vm/ci/ciMethodData.cpp @ 14674:53ed0f89f44e

8035841: assert(dp_src->tag() == dp_dst->tag()) failed: should be same tags 1 != 0 at ciMethodData.cpp:90 Summary: concurrent update of traps with construction of ciMethodData Reviewed-by: kvn, twisti
author roland
date Wed, 05 Mar 2014 09:29:12 +0100
parents fdad2932c73f
children 92aa6797d639 78bbf4d43a14
comparison
equal deleted inserted replaced
14671:77ca9a58fbe8 14674:53ed0f89f44e
85 DataLayout* dp_src = mdo->extra_data_base(); 85 DataLayout* dp_src = mdo->extra_data_base();
86 DataLayout* end_src = mdo->extra_data_limit(); 86 DataLayout* end_src = mdo->extra_data_limit();
87 DataLayout* dp_dst = extra_data_base(); 87 DataLayout* dp_dst = extra_data_base();
88 for (;; dp_src = MethodData::next_extra(dp_src), dp_dst = MethodData::next_extra(dp_dst)) { 88 for (;; dp_src = MethodData::next_extra(dp_src), dp_dst = MethodData::next_extra(dp_dst)) {
89 assert(dp_src < end_src, "moved past end of extra data"); 89 assert(dp_src < end_src, "moved past end of extra data");
90 assert(dp_src->tag() == dp_dst->tag(), err_msg("should be same tags %d != %d", dp_src->tag(), dp_dst->tag())); 90 // New traps in the MDO can be added as we translate the copy so
91 switch(dp_src->tag()) { 91 // look at the entries in the copy.
92 switch(dp_dst->tag()) {
92 case DataLayout::speculative_trap_data_tag: { 93 case DataLayout::speculative_trap_data_tag: {
93 ciSpeculativeTrapData* data_dst = new ciSpeculativeTrapData(dp_dst); 94 ciSpeculativeTrapData* data_dst = new ciSpeculativeTrapData(dp_dst);
94 SpeculativeTrapData* data_src = new SpeculativeTrapData(dp_src); 95 SpeculativeTrapData* data_src = new SpeculativeTrapData(dp_src);
95 data_dst->translate_from(data_src); 96 data_dst->translate_from(data_src);
96 break; 97 break;
100 case DataLayout::no_tag: 101 case DataLayout::no_tag:
101 case DataLayout::arg_info_data_tag: 102 case DataLayout::arg_info_data_tag:
102 // An empty slot or ArgInfoData entry marks the end of the trap data 103 // An empty slot or ArgInfoData entry marks the end of the trap data
103 return; 104 return;
104 default: 105 default:
105 fatal(err_msg("bad tag = %d", dp_src->tag())); 106 fatal(err_msg("bad tag = %d", dp_dst->tag()));
106 } 107 }
107 } 108 }
108 } 109 }
109 110
110 void ciMethodData::load_data() { 111 void ciMethodData::load_data() {