< prev index next >
src/hotspot/share/runtime/safepointVerifiers.hpp
Print this page
*** 26,143 ****
#define SHARE_RUNTIME_SAFEPOINTVERIFIERS_HPP
#include "memory/allocation.hpp"
#include "runtime/thread.hpp"
- // A NoGCVerifier object can be placed in methods where one assumes that
- // no garbage collection will occur. The destructor will verify this property
- // unless the constructor is called with argument false (not verifygc).
- //
- // The check will only be done in debug mode and if verifygc true.
-
- class NoGCVerifier: public StackObj {
- friend class PauseNoGCVerifier;
-
- protected:
- bool _verifygc;
- unsigned int _old_invocations;
-
- public:
- #ifdef ASSERT
- NoGCVerifier(bool verifygc = true);
- ~NoGCVerifier();
- #else
- NoGCVerifier(bool verifygc = true) {}
- ~NoGCVerifier() {}
- #endif
- };
-
- // A PauseNoGCVerifier is used to temporarily pause the behavior
- // of a NoGCVerifier object. If we are not in debug mode or if the
- // NoGCVerifier object has a _verifygc value of false, then there
- // is nothing to do.
-
- class PauseNoGCVerifier: public StackObj {
- private:
- NoGCVerifier * _ngcv;
-
- public:
- #ifdef ASSERT
- PauseNoGCVerifier(NoGCVerifier * ngcv);
- ~PauseNoGCVerifier();
- #else
- PauseNoGCVerifier(NoGCVerifier * ngcv) {}
- ~PauseNoGCVerifier() {}
- #endif
- };
-
-
// A NoSafepointVerifier object will throw an assertion failure if
// the current thread passes a possible safepoint while this object is
// instantiated. A safepoint, will either be: an oop allocation, blocking
// on a Mutex or JavaLock, or executing a VM operation.
//
! // If StrictSafepointChecks is turned off, it degrades into a NoGCVerifier
! //
! class NoSafepointVerifier : public NoGCVerifier {
friend class PauseNoSafepointVerifier;
private:
- bool _activated;
Thread *_thread;
public:
! #ifdef ASSERT
! NoSafepointVerifier(bool activated = true, bool verifygc = true ) :
! NoGCVerifier(verifygc),
! _activated(activated) {
! _thread = Thread::current();
! if (_activated) {
! _thread->_allow_safepoint_count++;
! }
! }
!
! ~NoSafepointVerifier() {
! if (_activated) {
! _thread->_allow_safepoint_count--;
! }
! }
! #else
! NoSafepointVerifier(bool activated = true, bool verifygc = true) : NoGCVerifier(verifygc){}
! ~NoSafepointVerifier() {}
! #endif
};
// A PauseNoSafepointVerifier is used to temporarily pause the
! // behavior of a NoSafepointVerifier object. If we are not in debug
! // mode then there is nothing to do. If the NoSafepointVerifier
! // object has an _activated value of false, then there is nothing to
! // do for safepoint and allocation checking, but there may still be
! // something to do for the underlying NoGCVerifier object.
! class PauseNoSafepointVerifier : public PauseNoGCVerifier {
private:
! NoSafepointVerifier * _nsv;
public:
! #ifdef ASSERT
! PauseNoSafepointVerifier(NoSafepointVerifier * nsv)
! : PauseNoGCVerifier(nsv) {
!
! _nsv = nsv;
! if (_nsv->_activated) {
! _nsv->_thread->_allow_safepoint_count--;
! }
! }
!
! ~PauseNoSafepointVerifier() {
! if (_nsv->_activated) {
! _nsv->_thread->_allow_safepoint_count++;
! }
! }
! #else
! PauseNoSafepointVerifier(NoSafepointVerifier * nsv)
! : PauseNoGCVerifier(nsv) {}
! ~PauseNoSafepointVerifier() {}
! #endif
};
#endif // SHARE_RUNTIME_SAFEPOINTVERIFIERS_HPP
--- 26,58 ----
#define SHARE_RUNTIME_SAFEPOINTVERIFIERS_HPP
#include "memory/allocation.hpp"
#include "runtime/thread.hpp"
// A NoSafepointVerifier object will throw an assertion failure if
// the current thread passes a possible safepoint while this object is
// instantiated. A safepoint, will either be: an oop allocation, blocking
// on a Mutex or JavaLock, or executing a VM operation.
//
! class NoSafepointVerifier : public StackObj {
friend class PauseNoSafepointVerifier;
private:
Thread *_thread;
public:
! NoSafepointVerifier() NOT_DEBUG_RETURN;
! ~NoSafepointVerifier() NOT_DEBUG_RETURN;
};
// A PauseNoSafepointVerifier is used to temporarily pause the
! // behavior of a NoSafepointVerifier object.
! class PauseNoSafepointVerifier : public StackObj {
private:
! NoSafepointVerifier* _nsv;
public:
! PauseNoSafepointVerifier(NoSafepointVerifier* nsv) NOT_DEBUG_RETURN;
! ~PauseNoSafepointVerifier() NOT_DEBUG_RETURN;
};
#endif // SHARE_RUNTIME_SAFEPOINTVERIFIERS_HPP
< prev index next >