|
28 | 28 | #include "gc/shared/barrierSet.hpp"
|
29 | 29 | #include "gc/shared/barrierSetNMethod.hpp"
|
30 | 30 | #include "gc/shared/suspendibleThreadSet.hpp"
|
| 31 | +#include "gc/z/zBarrier.inline.hpp" |
31 | 32 | #include "gc/z/zGlobals.hpp"
|
32 | 33 | #include "gc/z/zLock.inline.hpp"
|
33 | 34 | #include "gc/z/zNMethod.hpp"
|
34 | 35 | #include "gc/z/zNMethodData.hpp"
|
35 | 36 | #include "gc/z/zNMethodTable.hpp"
|
36 |
| -#include "gc/z/zOopClosures.inline.hpp" |
37 | 37 | #include "gc/z/zTask.hpp"
|
38 | 38 | #include "gc/z/zWorkers.hpp"
|
39 | 39 | #include "logging/log.hpp"
|
40 | 40 | #include "memory/allocation.inline.hpp"
|
41 | 41 | #include "memory/iterator.hpp"
|
42 | 42 | #include "memory/resourceArea.hpp"
|
43 | 43 | #include "memory/universe.hpp"
|
| 44 | +#include "oops/oop.inline.hpp" |
44 | 45 | #include "runtime/atomic.hpp"
|
45 | 46 | #include "utilities/debug.hpp"
|
46 | 47 |
|
@@ -243,6 +244,26 @@ void ZNMethod::nmethod_oops_do_inner(nmethod* nm, OopClosure* cl) {
|
243 | 244 | }
|
244 | 245 | }
|
245 | 246 |
|
| 247 | +class ZNMethodOopClosure : public OopClosure { |
| 248 | +public: |
| 249 | + virtual void do_oop(oop* p) { |
| 250 | + if (ZResurrection::is_blocked()) { |
| 251 | + ZBarrier::keep_alive_barrier_on_phantom_root_oop_field(p); |
| 252 | + } else { |
| 253 | + ZBarrier::load_barrier_on_root_oop_field(p); |
| 254 | + } |
| 255 | + } |
| 256 | + |
| 257 | + virtual void do_oop(narrowOop* p) { |
| 258 | + ShouldNotReachHere(); |
| 259 | + } |
| 260 | +}; |
| 261 | + |
| 262 | +void ZNMethod::nmethod_oops_barrier(nmethod* nm) { |
| 263 | + ZNMethodOopClosure cl; |
| 264 | + nmethod_oops_do_inner(nm, &cl); |
| 265 | +} |
| 266 | + |
246 | 267 | void ZNMethod::nmethods_do_begin() {
|
247 | 268 | ZNMethodTable::nmethods_do_begin();
|
248 | 269 | }
|
@@ -307,8 +328,7 @@ class ZNMethodUnlinkClosure : public NMethodClosure {
|
307 | 328 |
|
308 | 329 | if (ZNMethod::is_armed(nm)) {
|
309 | 330 | // Heal oops and disarm
|
310 |
| - ZNMethodOopClosure cl; |
311 |
| - ZNMethod::nmethod_oops_do(nm, &cl); |
| 331 | + ZNMethod::nmethod_oops_barrier(nm); |
312 | 332 | ZNMethod::disarm(nm);
|
313 | 333 | }
|
314 | 334 |
|
|
0 commit comments