< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahSpinLock.hpp
Print this page
rev 55060 : 8224875: Shenandoah: ParallelCleaning code unloading should take lock to protect shared code roots array
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2017, 2018, Red Hat, Inc. All rights reserved.
+ * Copyright (c) 2017, 2019, Red Hat, Inc. All rights reserved.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
@@ -19,28 +19,28 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
-#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHHEAPLOCK_HPP
-#define SHARE_GC_SHENANDOAH_SHENANDOAHHEAPLOCK_HPP
+#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHSPINLOCK_HPP
+#define SHARE_GC_SHENANDOAH_SHENANDOAHSPINLOCK_HPP
#include "memory/allocation.hpp"
#include "runtime/thread.hpp"
-class ShenandoahHeapLock {
+class ShenandoahSpinLock {
private:
enum LockState { unlocked = 0, locked = 1 };
DEFINE_PAD_MINUS_SIZE(0, DEFAULT_CACHE_LINE_SIZE, sizeof(volatile int));
volatile int _state;
DEFINE_PAD_MINUS_SIZE(1, DEFAULT_CACHE_LINE_SIZE, sizeof(volatile Thread*));
volatile Thread* _owner;
DEFINE_PAD_MINUS_SIZE(2, DEFAULT_CACHE_LINE_SIZE, 0);
public:
- ShenandoahHeapLock() : _state(unlocked), _owner(NULL) {};
+ ShenandoahSpinLock() : _state(unlocked), _owner(NULL) {};
void lock() {
Thread::SpinAcquire(&_state, "Shenandoah Heap Lock");
#ifdef ASSERT
assert(_state == locked, "must be locked");
@@ -74,20 +74,26 @@
"must own heap lock or by VM thread at safepoint");
}
#endif
};
-class ShenandoahHeapLocker : public StackObj {
+class ShenandoahSpinLocker : public StackObj {
private:
- ShenandoahHeapLock* _lock;
+ ShenandoahSpinLock* const _lock;
public:
- ShenandoahHeapLocker(ShenandoahHeapLock* lock) {
- _lock = lock;
+ ShenandoahSpinLocker(ShenandoahSpinLock* lock) : _lock(lock) {
+ if (_lock != NULL) {
_lock->lock();
}
+ }
- ~ShenandoahHeapLocker() {
+ ~ShenandoahSpinLocker() {
+ if (_lock != NULL) {
_lock->unlock();
}
+ }
};
-#endif // SHARE_GC_SHENANDOAH_SHENANDOAHHEAPLOCK_HPP
+typedef ShenandoahSpinLock ShenandoahHeapLock;
+typedef ShenandoahSpinLocker ShenandoahHeapLocker;
+
+#endif // SHARE_GC_SHENANDOAH_SHENANDOAHSPINLOCK_HPP
< prev index next >