internal AtomicSafetyHandleInternal *alloc() { if (m_nextAvail != null) { AtomicSafetyHandleInternal *r = &m_nextAvail->handle; m_nextAvail = m_nextAvail->nextAvail; return(r); } AtomicSafetyHandleNode *h = m_headChunk->m_curChunk; if ((IntPtr)h == (IntPtr)m_headChunk->GetHeader()) { addChunk(); h = m_headChunk->m_curChunk; } m_headChunk->m_curChunk = (AtomicSafetyHandleNode *)((ulong)m_headChunk->m_curChunk + esz); h->handle.version1 = h->handle.version2 = h->handle.permissions = 0; return(&h->handle); }
internal AtomicSafetyHandlePool() { m_headChunk = null; m_nextAvail = null; addChunk(); }
internal void release(AtomicSafetyHandleInternal *handle) { ((AtomicSafetyHandleNode *)handle)->nextAvail = m_nextAvail; m_nextAvail = (AtomicSafetyHandleNode *)handle; }