8224932: Shenandoah: Rename ShenandoahHeapLock, make it general purpose lock
authorzgu
Wed, 29 May 2019 09:43:37 -0400
changeset 55083 2fc6027f0eed
parent 55082 335f474becde
child 55084 a8e2e273c943
8224932: Shenandoah: Rename ShenandoahHeapLock, make it general purpose lock Reviewed-by: shade
src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp
src/hotspot/share/gc/shenandoah/shenandoahHeapLock.hpp
src/hotspot/share/gc/shenandoah/shenandoahLock.hpp
--- 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