]> git.ozlabs.org Git - ccan/blobdiff - ccan/ptr_valid/ptr_valid.c
ptr_valid: fix spurious SIGINT under lldb on MacOS
[ccan] / ccan / ptr_valid / ptr_valid.c
index ef95d34f39c7a145a2b0c3621c8c764ea65d140b..7931984023ce02b439d26e2660e27919476b75dc 100644 (file)
@@ -161,7 +161,7 @@ static void finish_child(struct ptr_valid_batch *batch)
 {
        close(batch->to_child);
        close(batch->from_child);
-       waitpid(batch->child_pid, NULL, 0);
+       while (waitpid(batch->child_pid, NULL, 0) < 0 && errno == EINTR);
        batch->child_pid = 0;
 }
 
@@ -246,9 +246,14 @@ static bool check_with_child(struct ptr_valid_batch *batch,
                        return false;
        }
 
-       write(batch->to_child, &p, sizeof(p));
-       write(batch->to_child, &size, sizeof(size));
-       write(batch->to_child, &is_write, sizeof(is_write));
+       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);