示例#1
0
        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);
        }
示例#2
0
 internal AtomicSafetyHandlePool()
 {
     m_headChunk = null;
     m_nextAvail = null;
     addChunk();
 }
示例#3
0
 internal void release(AtomicSafetyHandleInternal *handle)
 {
     ((AtomicSafetyHandleNode *)handle)->nextAvail = m_nextAvail;
     m_nextAvail = (AtomicSafetyHandleNode *)handle;
 }