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); }
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); }
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); }