Exemple #1
0
        public static void StackFree(tThread *pThread, void *pAddr)
        {
            tThreadStack *pStack = pThread->pThreadStack;

        #if _DEBUG
            ((uint *)pAddr)--;
            Mem.memset(pAddr, 0xfe, pStack->ofs - (uint)(((byte *)pAddr) - pStack->memory));
        #endif
            pStack->ofs = (uint)(((byte *)pAddr) - pStack->memory);
        }
Exemple #2
0
        static void Delete(tThread *pThis)
        {
            tThreadStack *pStack = pThis->pThreadStack;

            while (pStack != null)
            {
                tThreadStack *pNextStack = pStack->pNext;
                Mem.free(pStack);
                pStack = pNextStack;
            }
            Heap.MakeDeletable((/*HEAP_PTR*/ byte *)pThis);
        }
Exemple #3
0
        public static void *StackAlloc(tThread *pThread, uint size)
        {
            tThreadStack *pStack = pThread->pThreadStack;
            void *        pAddr  = pStack->memory + pStack->ofs;

        #if _DEBUG
            *(uint *)pAddr = 0xabababab;
            ((uint *)pAddr)++;
            pStack->ofs += 4;
        #endif
            pStack->ofs += size;
            if (pStack->ofs > tThreadStack.THREADSTACK_CHUNK_SIZE)
            {
                Sys.Crash("Thread-local stack is too large");
            }
        #if _DEBUG
            Mem.memset(pAddr, 0xcd, size);
            *(uint *)(((byte *)pAddr) + size) = 0xfbfbfbfb;
            pStack->ofs += 4;
        #endif
            return(pAddr);
        }