comparison src/share/vm/oops/oop.pcgc.inline.hpp @ 2044:06f017f7daa7

Merge.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Fri, 07 Jan 2011 18:18:08 +0100
parents 3cd116fd11be
children e5383553fd4e
comparison
equal deleted inserted replaced
1942:00bc9eaf0e24 2044:06f017f7daa7
1 /* 1 /*
2 * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2005, 2010, 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.
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any 20 * or visit www.oracle.com if you need additional information or have any
21 * questions. 21 * questions.
22 * 22 *
23 */ 23 */
24
25 #ifndef SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP
26 #define SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP
27
28 #ifndef SERIALGC
29 #include "gc_implementation/parNew/parNewGeneration.hpp"
30 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
31 #include "gc_implementation/parallelScavenge/psCompactionManager.hpp"
32 #include "gc_implementation/parallelScavenge/psParallelCompact.hpp"
33 #include "gc_implementation/parallelScavenge/psScavenge.hpp"
34 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp"
35 #endif
24 36
25 inline void oopDesc::update_contents(ParCompactionManager* cm) { 37 inline void oopDesc::update_contents(ParCompactionManager* cm) {
26 // The klass field must be updated before anything else 38 // The klass field must be updated before anything else
27 // can be done. 39 // can be done.
28 DEBUG_ONLY(klassOopDesc* original_klass = klass()); 40 DEBUG_ONLY(klassOopDesc* original_klass = klass());
104 markOop curMark; 116 markOop curMark;
105 117
106 assert(forwardPtrMark->decode_pointer() == p, "encoding must be reversable"); 118 assert(forwardPtrMark->decode_pointer() == p, "encoding must be reversable");
107 assert(sizeof(markOop) == sizeof(intptr_t), "CAS below requires this."); 119 assert(sizeof(markOop) == sizeof(intptr_t), "CAS below requires this.");
108 120
109 while (!is_forwarded()) { 121 while (!oldMark->is_marked()) {
110 curMark = (markOop)Atomic::cmpxchg_ptr(forwardPtrMark, &_mark, oldMark); 122 curMark = (markOop)Atomic::cmpxchg_ptr(forwardPtrMark, &_mark, oldMark);
123 assert(is_forwarded(), "object should have been forwarded");
111 if (curMark == oldMark) { 124 if (curMark == oldMark) {
112 assert(is_forwarded(), "the CAS should have succeeded.");
113 return NULL; 125 return NULL;
114 } 126 }
127 // If the CAS was unsuccessful then curMark->is_marked()
128 // should return true as another thread has CAS'd in another
129 // forwarding pointer.
115 oldMark = curMark; 130 oldMark = curMark;
116 } 131 }
117 return forwardee(); 132 return forwardee();
118 } 133 }
119 134
131 beg_addr, end_addr); 146 beg_addr, end_addr);
132 } else { 147 } else {
133 PSParallelCompact::adjust_pointer(klass_addr(), beg_addr, end_addr); 148 PSParallelCompact::adjust_pointer(klass_addr(), beg_addr, end_addr);
134 } 149 }
135 } 150 }
151
152 #endif // SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP