static bool check_with_child(struct ptr_valid_batch *batch, const void *p, size_t size, bool is_write) { char ret; if (!child_alive(batch)) { if (!create_child(batch)) return false; } if (write(batch->to_child, &p, sizeof(p)) + write(batch->to_child, &size, sizeof(size)) + write(batch->to_child, &is_write, sizeof(is_write)) != sizeof(p) + sizeof(size) + sizeof(is_write)) { finish_child(batch); errno = EFAULT; return false; } if (read(batch->from_child, &ret, sizeof(ret)) != sizeof(ret)) { finish_child(batch); errno = EFAULT; return false; } return true; }
void ptr_valid_batch_end(struct ptr_valid_batch *batch) { if (child_alive(batch)) finish_child(batch); free(batch->maps); }