< 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 >