comparison src/share/vm/oops/cpCacheOop.cpp @ 2246:fbf3184da15d

7012339: JSR 292 crash in G1SATBCardTableModRefBS::write_ref_field_pre_work() Reviewed-by: jrose, never
author twisti
date Tue, 01 Feb 2011 05:51:24 -0800
parents f95d63e2154a
children a97fd181b813
comparison
equal deleted inserted replaced
2245:638119ce7cfd 2246:fbf3184da15d
1 /* 1 /*
2 * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
96 } 96 }
97 97
98 // Atomically sets f1 if it is still NULL, otherwise it keeps the 98 // Atomically sets f1 if it is still NULL, otherwise it keeps the
99 // current value. 99 // current value.
100 void ConstantPoolCacheEntry::set_f1_if_null_atomic(oop f1) { 100 void ConstantPoolCacheEntry::set_f1_if_null_atomic(oop f1) {
101 // Use barriers as in oop_store 101 // Use barriers as in oop_store
102 HeapWord* f1_addr = (HeapWord*) &_f1; 102 oop* f1_addr = (oop*) &_f1;
103 update_barrier_set_pre(f1_addr, f1); 103 update_barrier_set_pre(f1_addr, f1);
104 void* result = Atomic::cmpxchg_ptr(f1, f1_addr, NULL); 104 void* result = Atomic::cmpxchg_ptr(f1, f1_addr, NULL);
105 bool success = (result == NULL); 105 bool success = (result == NULL);
106 if (success) { 106 if (success) {
107 update_barrier_set((void*) f1_addr, f1); 107 update_barrier_set(f1_addr, f1);
108 } 108 }
109 } 109 }
110 110
111 #ifdef ASSERT 111 #ifdef ASSERT
112 // It is possible to have two different dummy methodOops created 112 // It is possible to have two different dummy methodOops created
113 // when the resolve code for invoke interface executes concurrently 113 // when the resolve code for invoke interface executes concurrently
114 // Hence the assertion below is weakened a bit for the invokeinterface 114 // Hence the assertion below is weakened a bit for the invokeinterface