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