--- a/hotspot/src/share/vm/oops/compiledICHolder.cpp Thu Jun 19 13:31:14 2014 +0200
+++ b/hotspot/src/share/vm/oops/compiledICHolder.cpp Wed Jun 04 11:56:44 2014 +0200
@@ -27,11 +27,27 @@
#include "oops/klass.hpp"
#include "oops/method.hpp"
#include "oops/oop.inline2.hpp"
+#include "runtime/atomic.inline.hpp"
volatile int CompiledICHolder::_live_count;
volatile int CompiledICHolder::_live_not_claimed_count;
+CompiledICHolder::CompiledICHolder(Method* method, Klass* klass)
+ : _holder_method(method), _holder_klass(klass) {
+#ifdef ASSERT
+ Atomic::inc(&_live_count);
+ Atomic::inc(&_live_not_claimed_count);
+#endif // ASSERT
+}
+
+#ifdef ASSERT
+CompiledICHolder::~CompiledICHolder() {
+ assert(_live_count > 0, "underflow");
+ Atomic::dec(&_live_count);
+}
+#endif // ASSERT
+
// Printing
void CompiledICHolder::print_on(outputStream* st) const {
@@ -51,3 +67,11 @@
guarantee(holder_method()->is_method(), "should be method");
guarantee(holder_klass()->is_klass(), "should be klass");
}
+
+#ifdef ASSERT
+
+void CompiledICHolder::claim() {
+ Atomic::dec(&_live_not_claimed_count);
+}
+
+#endif // ASSERT