8224932: Shenandoah: Rename ShenandoahHeapLock, make it general purpose lock
Reviewed-by: shade
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Wed May 29 15:25:21 2019 +0200
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Wed May 29 09:43:37 2019 -0400
@@ -29,7 +29,7 @@
#include "gc/shared/collectedHeap.hpp"
#include "gc/shenandoah/shenandoahAsserts.hpp"
#include "gc/shenandoah/shenandoahAllocRequest.hpp"
-#include "gc/shenandoah/shenandoahHeapLock.hpp"
+#include "gc/shenandoah/shenandoahLock.hpp"
#include "gc/shenandoah/shenandoahEvacOOMHandler.hpp"
#include "gc/shenandoah/shenandoahSharedVariables.hpp"
#include "services/memoryManager.hpp"
@@ -103,6 +103,8 @@
};
#endif
+typedef ShenandoahLock ShenandoahHeapLock;
+typedef ShenandoahLocker ShenandoahHeapLocker;
// Shenandoah GC is low-pause concurrent GC that uses Brooks forwarding pointers
// to encode forwarding data. See BrooksPointer for details on forwarding data encoding.
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeapLock.hpp Wed May 29 15:25:21 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2017, 2018, 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.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * 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
-
-#include "memory/allocation.hpp"
-#include "runtime/thread.hpp"
-
-class ShenandoahHeapLock {
-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) {};
-
- void lock() {
- Thread::SpinAcquire(&_state, "Shenandoah Heap Lock");
-#ifdef ASSERT
- assert(_state == locked, "must be locked");
- assert(_owner == NULL, "must not be owned");
- _owner = Thread::current();
-#endif
- }
-
- void unlock() {
-#ifdef ASSERT
- assert (_owner == Thread::current(), "sanity");
- _owner = NULL;
-#endif
- Thread::SpinRelease(&_state);
- }
-
-#ifdef ASSERT
- void assert_owned_by_current_thread() {
- assert(_state == locked, "must be locked");
- assert(_owner == Thread::current(), "must be owned by current thread");
- }
-
- void assert_not_owned_by_current_thread() {
- assert(_owner != Thread::current(), "must be not owned by current thread");
- }
-
- void assert_owned_by_current_thread_or_safepoint() {
- Thread* thr = Thread::current();
- assert((_state == locked && _owner == thr) ||
- (SafepointSynchronize::is_at_safepoint() && thr->is_VM_thread()),
- "must own heap lock or by VM thread at safepoint");
- }
-#endif
-};
-
-class ShenandoahHeapLocker : public StackObj {
-private:
- ShenandoahHeapLock* _lock;
-public:
- ShenandoahHeapLocker(ShenandoahHeapLock* lock) {
- _lock = lock;
- _lock->lock();
- }
-
- ~ShenandoahHeapLocker() {
- _lock->unlock();
- }
-};
-
-#endif // SHARE_GC_SHENANDOAH_SHENANDOAHHEAPLOCK_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shenandoah/shenandoahLock.hpp Wed May 29 09:43:37 2019 -0400
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHLOCK_HPP
+#define SHARE_GC_SHENANDOAH_SHENANDOAHLOCK_HPP
+
+#include "memory/allocation.hpp"
+#include "runtime/thread.hpp"
+
+class ShenandoahLock {
+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:
+ ShenandoahLock() : _state(unlocked), _owner(NULL) {};
+
+ void lock() {
+ Thread::SpinAcquire(&_state, "Shenandoah Heap Lock");
+#ifdef ASSERT
+ assert(_state == locked, "must be locked");
+ assert(_owner == NULL, "must not be owned");
+ _owner = Thread::current();
+#endif
+ }
+
+ void unlock() {
+#ifdef ASSERT
+ assert (_owner == Thread::current(), "sanity");
+ _owner = NULL;
+#endif
+ Thread::SpinRelease(&_state);
+ }
+
+#ifdef ASSERT
+ void assert_owned_by_current_thread() {
+ assert(_state == locked, "must be locked");
+ assert(_owner == Thread::current(), "must be owned by current thread");
+ }
+
+ void assert_not_owned_by_current_thread() {
+ assert(_owner != Thread::current(), "must be not owned by current thread");
+ }
+
+ void assert_owned_by_current_thread_or_safepoint() {
+ Thread* thr = Thread::current();
+ assert((_state == locked && _owner == thr) ||
+ (SafepointSynchronize::is_at_safepoint() && thr->is_VM_thread()),
+ "must own heap lock or by VM thread at safepoint");
+ }
+#endif
+};
+
+class ShenandoahLocker : public StackObj {
+private:
+ ShenandoahLock* const _lock;
+public:
+ ShenandoahLocker(ShenandoahLock* lock) : _lock(lock) {
+ if (_lock != NULL) {
+ _lock->lock();
+ }
+ }
+
+ ~ShenandoahLocker() {
+ if (_lock != NULL) {
+ _lock->unlock();
+ }
+ }
+};
+
+#endif // SHARE_GC_SHENANDOAH_SHENANDOAHLOCK_HPP