< prev index next >
src/hotspot/share/gc/z/zSafeDelete.inline.hpp
Print this page
*** 27,74 ****
#include "gc/z/zArray.inline.hpp"
#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);
}
}
--- 27,74 ----
#include "gc/z/zArray.inline.hpp"
#include "gc/z/zSafeDelete.hpp"
#include "metaprogramming/isArray.hpp"
#include "utilities/debug.hpp"
! template <typename LockT, typename T>
! ZSafeDeleteImpl<LockT, T>::ZSafeDeleteImpl() :
_lock(),
_enabled(0),
_deferred() {}
! template <typename LockT, typename T>
! bool ZSafeDeleteImpl<LockT, T>::deferred_delete(ItemT* item) {
! ZLocker<LockT> locker(&_lock);
if (_enabled > 0) {
_deferred.add(item);
return true;
}
return false;
}
! template <typename LockT, typename T>
! void ZSafeDeleteImpl<LockT, T>::immediate_delete(ItemT* item) {
if (IsArray<T>::value) {
delete [] item;
} else {
delete item;
}
}
! template <typename LockT, typename T>
! void ZSafeDeleteImpl<LockT, T>::enable_deferred_delete() {
! ZLocker<LockT> locker(&_lock);
_enabled++;
}
! template <typename LockT, typename T>
! void ZSafeDeleteImpl<LockT, T>::disable_deferred_delete() {
ZArray<ItemT*> deferred;
{
! ZLocker<LockT> locker(&_lock);
assert(_enabled > 0, "Invalid state");
if (--_enabled == 0) {
deferred.transfer(&_deferred);
}
}
*** 77,88 ****
for (ItemT* item; iter.next(&item);) {
immediate_delete(item);
}
}
! template <typename T>
! void ZSafeDelete<T>::operator()(ItemT* item) {
if (!deferred_delete(item)) {
immediate_delete(item);
}
}
--- 77,88 ----
for (ItemT* item; iter.next(&item);) {
immediate_delete(item);
}
}
! template <typename LockT, typename T>
! void ZSafeDeleteImpl<LockT, T>::operator()(ItemT* item) {
if (!deferred_delete(item)) {
immediate_delete(item);
}
}
< prev index next >