void VMDestroy(VM vm) { int r; int zero_fd, none_fd; AVERT(VM, vm); AVER(vm->mapped == (Size)0); /* This appears to be pretty pointless, since the space 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; zero_fd = vm->zero_fd; none_fd = vm->none_fd; r = munmap((caddr_t)vm->base, (int)AddrOffset(vm->base, vm->limit)); AVER(r == 0); r = munmap((caddr_t)vm, (int)SizeAlignUp(sizeof(VMStruct), vm->align)); AVER(r == 0); /* .close.fail: We ignore failure from close() as there's very */ /* little we can do anyway. */ (void)close(zero_fd); (void)close(none_fd); EVENT_P(VMDestroy, vm); }
void VMDestroy(VM vm) { int r; int zero_fd; AVERT(VM, vm); AVER(vm->mapped == (Size)0); /* 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; zero_fd = vm->zero_fd; 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); r = close(zero_fd); AVER(r == 0); EVENT_P(VMDestroy, vm); }