waitid(2) returns 0 on success; do post-call cancelation only if
authorguenther <guenther@openbsd.org>
Mon, 19 Dec 2022 03:40:20 +0000 (03:40 +0000)
committerguenther <guenther@openbsd.org>
Mon, 19 Dec 2022 03:40:20 +0000 (03:40 +0000)
it either failed, or succeeded but didn't put a status into infop.

ok millert@

lib/libc/sys/w_waitid.c

index 5aebd3f..ec8d29f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: w_waitid.c,v 1.1 2022/10/26 23:16:24 kettenis Exp $ */
+/*     $OpenBSD: w_waitid.c,v 1.2 2022/12/19 03:40:20 guenther Exp $ */
 /*
  * Copyright (c) 2015 Philip Guenther <guenther@openbsd.org>
  *
@@ -25,7 +25,7 @@ waitid(idtype_t idtype, id_t id, siginfo_t *info, int options)
 
        ENTER_CANCEL_POINT(1);
        ret = HIDDEN(waitid)(idtype, id, info, options);
-       LEAVE_CANCEL_POINT(ret <= 0);
+       LEAVE_CANCEL_POINT(ret == -1 || info->si_signo == 0);
        return (ret);
 }
 DEF_CANCEL(waitid);