void VMDestroy(VM vm) { /* All vm areas should have been unmapped. */ AVERT(VM, vm); AVER(vm->mapped == (Size)0); AVER(vm->reserved == AddrOffset(vm->base, vm->limit)); memset((void *)vm->base, VMJunkBYTE, AddrOffset(vm->base, vm->limit)); free(vm->block); vm->sig = SigInvalid; free(vm); EVENT1(VMDestroy, vm); }
static void BufferAbsFinish(Inst inst) { Buffer buffer = MustBeA(Buffer, inst); AVERT(Buffer, buffer); AVER(BufferIsReset(buffer)); /* Detach the buffer from its owning pool and unsig it. */ RingRemove(&buffer->poolRing); InstFinish(MustBeA(Inst, buffer)); buffer->sig = SigInvalid; /* Finish off the generic buffer fields. */ RingFinish(&buffer->poolRing); EVENT1(BufferFinish, buffer); }
void VMFinish(VM vm) { BOOL b; AVERT(VM, vm); /* Descriptor must not be stored inside its own VM at this point. */ AVER(PointerAdd(vm, sizeof *vm) <= vm->block || PointerAdd(vm->block, VMReserved(vm)) <= (Pointer)vm); /* All address space must have been unmapped. */ AVER(VMMapped(vm) == (Size)0); EVENT1(VMFinish, vm); vm->sig = SigInvalid; b = VirtualFree((LPVOID)vm->block, (SIZE_T)0, MEM_RELEASE); AVER(b != 0); }
void VMDestroy(VM vm) { BOOL b; AVERT(VM, vm); AVER(vm->mapped == 0); /* This appears to be pretty pointless, since the vm descriptor page * is about to vanish completely. However, the VirtualFree might * fail and it would be nice to have a dead sig there. */ vm->sig = SigInvalid; b = VirtualFree((LPVOID)vm->base, (SIZE_T)0, MEM_RELEASE); AVER(b != 0); b = VirtualFree((LPVOID)vm, (SIZE_T)0, MEM_RELEASE); AVER(b != 0); EVENT1(VMDestroy, vm); }
void VMDestroy(VM vm) { int r; AVERT(VM, vm); AVER(vm->mapped == (Size)0); EVENT1(VMDestroy, vm); /* This appears to be pretty pointless, since the descriptor */ /* page is about to vanish completely. However, munmap might fail */ /* for some reason, and this would ensure that it was still */ /* discovered if sigs were being checked. */ vm->sig = SigInvalid; r = munmap((void *)vm->base, (size_t)AddrOffset(vm->base, vm->limit)); AVER(r == 0); r = munmap((void *)vm, (size_t)SizeAlignUp(sizeof(VMStruct), vm->align)); AVER(r == 0); }