< prev index next >
src/hotspot/share/gc/z/zSafeDelete.inline.hpp
Print this page
*** 28,74 ****
#include "gc/z/zSafeDelete.hpp"
#include "metaprogramming/isArray.hpp"
#include "utilities/debug.hpp"
template <typename T>
! ZSafeDelete<T>::ZSafeDelete() :
! _lock(),
_enabled(0),
_deferred() {}
template <typename T>
! bool ZSafeDelete<T>::deferred_delete(ItemT* item) {
! ZLocker<ZLock> locker(&_lock);
if (_enabled > 0) {
_deferred.add(item);
return true;
}
return false;
}
template <typename T>
! void ZSafeDelete<T>::immediate_delete(ItemT* item) {
if (IsArray<T>::value) {
delete [] item;
} else {
delete item;
}
}
template <typename T>
! void ZSafeDelete<T>::enable_deferred_delete() {
! ZLocker<ZLock> locker(&_lock);
_enabled++;
}
template <typename T>
! void ZSafeDelete<T>::disable_deferred_delete() {
ZArray<ItemT*> deferred;
{
! ZLocker<ZLock> locker(&_lock);
assert(_enabled > 0, "Invalid state");
if (--_enabled == 0) {
deferred.transfer(&_deferred);
}
}
--- 28,74 ----
#include "gc/z/zSafeDelete.hpp"
#include "metaprogramming/isArray.hpp"
#include "utilities/debug.hpp"
template <typename T>
! ZSafeDeleteImpl<T>::ZSafeDeleteImpl(ZLock* lock) :
! _lock(lock),
_enabled(0),
_deferred() {}
template <typename T>
! bool ZSafeDeleteImpl<T>::deferred_delete(ItemT* item) {
! ZLocker<ZLock> locker(_lock);
if (_enabled > 0) {
_deferred.add(item);
return true;
}
return false;
}
template <typename T>
! void ZSafeDeleteImpl<T>::immediate_delete(ItemT* item) {
if (IsArray<T>::value) {
delete [] item;
} else {
delete item;
}
}
template <typename T>
! void ZSafeDeleteImpl<T>::enable_deferred_delete() {
! ZLocker<ZLock> locker(_lock);
_enabled++;
}
template <typename T>
! void ZSafeDeleteImpl<T>::disable_deferred_delete() {
ZArray<ItemT*> deferred;
{
! ZLocker<ZLock> locker(_lock);
assert(_enabled > 0, "Invalid state");
if (--_enabled == 0) {
deferred.transfer(&_deferred);
}
}
*** 78,89 ****
immediate_delete(item);
}
}
template <typename T>
! void ZSafeDelete<T>::operator()(ItemT* item) {
if (!deferred_delete(item)) {
immediate_delete(item);
}
}
#endif // SHARE_GC_Z_ZSAFEDELETE_INLINE_HPP
--- 78,98 ----
immediate_delete(item);
}
}
template <typename T>
! void ZSafeDeleteImpl<T>::operator()(ItemT* item) {
if (!deferred_delete(item)) {
immediate_delete(item);
}
}
+ template <typename T>
+ ZSafeDelete<T>::ZSafeDelete() :
+ ZSafeDeleteImpl<T>(&_lock),
+ _lock() {}
+
+ template <typename T>
+ ZSafeDeleteNoLock<T>::ZSafeDeleteNoLock() :
+ ZSafeDeleteImpl<T>(NULL) {}
+
#endif // SHARE_GC_Z_ZSAFEDELETE_INLINE_HPP
< prev index next >