From patchwork Wed Nov 20 14:15:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 179853 Delivered-To: patch@linaro.org Received: by 2002:a92:38d5:0:0:0:0:0 with SMTP id g82csp2162669ilf; Wed, 20 Nov 2019 06:16:05 -0800 (PST) X-Google-Smtp-Source: APXvYqzRpt4Q79TRF3X5yBFtQSxVdsBFzWLzQ+I2VTAPQ278mbz5WR1UuxaqaY7bF3gFtHA/Xl51 X-Received: by 2002:a5d:50ce:: with SMTP id f14mr3905623wrt.219.1574259365007; Wed, 20 Nov 2019 06:16:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574259365; cv=none; d=google.com; s=arc-20160816; b=aJ1Mu7FDmBs/KZ+5ymoxr4p2/FZvojW2/PJrzihVnSxu8unhr40yf2IqxeGj1bBIjg qpkZDgtOuUEgkJQCtNL1s1PQP6IdNXrvOwm++PzyEmW9+FXwabW0DEKB+hAyxsWxY/HI wHU1ahbIiOOzGEDt5g5h5tPR3SMi3bHsey//2faGdYT5Y0tLdwGj9Y5hjKhlZiTmSJgm mZFPwWsUHCN9PF16iCg1lo4mJwS7iYcnUKPUP8zDjWjUWehjLk0Inqwlpyj3lSJyypth kM2IBZmHH217ljXEcQW8h+sEK4iu9lQdaugWDs9sR9QwlDgBVSTpxnOx+dn+0dyYvcz9 taZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:to:from :dkim-signature:delivered-to:sender:list-help:list-post:list-archive :list-subscribe:list-unsubscribe:list-id:precedence:mailing-list :dkim-signature:domainkey-signature; bh=48a1o4aMKtGnx5Ek7Ic2Xb0gL89NmqbXeOGxxXb1FyU=; b=Cu9yAlprG0m9KLETeH5gWbYWWmqF1Ge14JhCuuXtOmllFWensxWec+pYZaTK2b/pls 8k2XPqgIzy80FUX6LSfTrK3khZJi+W9tyMJu5PSC+Cb+Qcw8eKT46YIe6N46rFLZ2QKz rt5mQHibBaGunq09Kt4HxxUIztLB2/FrL2A+O6VWfnXCKLYmPFXiQ9UpNOCxjYy7SLfM dOUQlD2uPcFo+CHj8PE3yji7piWaYEgzj5zIX2iHv2AP3cLGnLRiDFi3N87G00gu13jH H5W6PaP9A8g6aCVpLJaeAjh2KhXSQsRjqmRFCzjEbIXwawezrIJbMtLd42sWZMSkYqKn 1hVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=mMhphYaB; dkim=pass header.i=@linaro.org header.s=google header.b=sySO6yde; spf=pass (google.com: domain of libc-alpha-return-107209-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="libc-alpha-return-107209-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id d10si14220488edo.298.2019.11.20.06.16.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Nov 2019 06:16:04 -0800 (PST) Received-SPF: pass (google.com: domain of libc-alpha-return-107209-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=mMhphYaB; dkim=pass header.i=@linaro.org header.s=google header.b=sySO6yde; spf=pass (google.com: domain of libc-alpha-return-107209-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="libc-alpha-return-107209-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=bBMH0sKPtdfEY+XNa8dqsoDZOnzbm8S Rjgc5Nxen6HtL+AVgssH5nQZX2nUnbr0TYv5r4nVPlKEe3uvOhF6xTRmgGq0JDh5 WFHj1EJFqKKjp8KMDCB1HR1TbSPbdcF3c5qLEl8JyO6M1HF7NAWU+zkUCnVbGmeM IZn0Sc7wOHbA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; s=default; bh=3mPgAvoJKvLikHMdvOTGHqBOqDU=; b=mMhph YaBo51CRX+s+fXS3ACHnykdTg99ErFs75UeGoYg/yEeo7+Dr60qeUfKeESGdaB6/ 7dVSexAvcKA+TIVqWs7JIYZ6jGjKnEP0F+KqMfXYWAIex6YKdDR7a/QHFXqfIOfK Z0uP27lCFuMXHyW8Fgih7E4c/xdHCsPX+0UQ+4= Received: (qmail 20032 invoked by alias); 20 Nov 2019 14:15:47 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 19987 invoked by uid 89); 20 Nov 2019 14:15:46 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=folder, Technical X-HELO: mail-qt1-f194.google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=48a1o4aMKtGnx5Ek7Ic2Xb0gL89NmqbXeOGxxXb1FyU=; b=sySO6ydeodjXYUwNbaBeZfr1JzafehEX0NAsOhie2Bdmc1A6r5FX2r6ESBKuxiY8Ye dO0p7TO0H6Kq3jehuSNThTPrzNqXOyrK6rpjjYIrYpY9RQeSpDqENBaOUhclyq5HtMfr NyN7oZOYC85pbUN2vsnlQuRJpjARCj9bwWYAntbUz2Y4OU2SPoyKVLO9ErXgcDJpy0qH Z6uqFgOqwdhpkuIYwjlmrXePzuWEnKrVlMZi0RU0my0+hLov5qGIK1nSxDGyNjd6VXW3 BvYT/womKVvpb0T9yZgQ5b+8TPi+8FAx4nBZCjidHl5vCCtX4IZOQDzNEzZVcGrq56HM DYTg== Return-Path: From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 3/3] posix: Remove posix waitid Date: Wed, 20 Nov 2019 11:15:35 -0300 Message-Id: <20191120141535.5303-3-adhemerval.zanella@linaro.org> In-Reply-To: <20191120141535.5303-1-adhemerval.zanella@linaro.org> References: <20191120141535.5303-1-adhemerval.zanella@linaro.org> The POSIX waitid implementation is problematic in some ways: - It emulates using waitpid, which default implementation calls wait4 and wait4 returns ENOSYS as default. - Also by using waitpid it does not allod support the WNOWAIT, WEXITED, WSTOPPED, or WCONTINUED flag. With current POSIX specification the flags are no longer marked as optional. Also due BZ#23091 Hurd still uses the implementation, so it is moved to as a Hurd arch-specific folder (with some minor cleanups). Checked against a i686-gnu (run-built-tests=no) --- sysdeps/{posix => mach/hurd}/waitid.c | 70 ++++----------------------- 1 file changed, 9 insertions(+), 61 deletions(-) rename sysdeps/{posix => mach/hurd}/waitid.c (65%) -- 2.17.1 diff --git a/sysdeps/posix/waitid.c b/sysdeps/mach/hurd/waitid.c similarity index 65% rename from sysdeps/posix/waitid.c rename to sysdeps/mach/hurd/waitid.c index 0942623553..d28d0034da 100644 --- a/sysdeps/posix/waitid.c +++ b/sysdeps/mach/hurd/waitid.c @@ -17,25 +17,11 @@ License along with the GNU C Library; if not, see . */ -#include #include -#include -#define __need_NULL -#include #include -#include -#include - -#ifdef DO_WAITID -# define OUR_WAITID DO_WAITID -#elif !defined NO_DO_WAITID -# define OUR_WAITID do_waitid -#endif - -#ifdef OUR_WAITID -static int -OUR_WAITID (idtype_t idtype, id_t id, siginfo_t *infop, int options) +int +__waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) { pid_t pid, child; int status; @@ -43,7 +29,7 @@ OUR_WAITID (idtype_t idtype, id_t id, siginfo_t *infop, int options) switch (idtype) { case P_PID: - if(id <= 0) + if (id <= 0) goto invalid; pid = (pid_t) id; break; @@ -72,31 +58,10 @@ OUR_WAITID (idtype_t idtype, id_t id, siginfo_t *infop, int options) return -1; } - /* This emulation using waitpid cannot support the waitid modes in which - we do not reap the child, or match only stopped and not dead children. */ - if (0 -#ifdef WNOWAIT - || (options & WNOWAIT) -#endif -#ifdef WEXITED - || ((options & (WEXITED|WSTOPPED|WCONTINUED)) - != (WEXITED | (options & WSTOPPED))) -#endif - ) - { - __set_errno (ENOTSUP); - return -1; - } - /* Note the waitid() is a cancellation point. But since we call waitpid() which itself is a cancellation point we do not have to do anything here. */ - child = __waitpid (pid, &status, - options -#ifdef WEXITED - &~ WEXITED -#endif - ); + child = __waitpid (pid, &status, options); if (child == -1) /* `waitpid' set `errno' for us. */ @@ -104,9 +69,11 @@ OUR_WAITID (idtype_t idtype, id_t id, siginfo_t *infop, int options) if (child == 0) { - /* The WHOHANG bit in OPTIONS is set and there are children available - but none has a status for us. The XPG docs do not mention this - case so we clear the `siginfo_t' struct and return successfully. */ + /* POSIX.1-2008, Technical Corrigendum 1 XSH/TC1-2008/0713 [153] states + that if waitid returns because WNOHANG was specified and status is + not available for any process specified by idtype and id, then the + si_signo and si_pid members of the structure pointed to by infop + shall be set to zero. */ infop->si_signo = 0; infop->si_code = 0; return 0; @@ -132,27 +99,8 @@ OUR_WAITID (idtype_t idtype, id_t id, siginfo_t *infop, int options) infop->si_code = CLD_STOPPED; infop->si_status = WSTOPSIG (status); } -#ifdef WIFCONTINUED - else if (WIFCONTINUED (status)) - { - infop->si_code = CLD_CONTINUED; - infop->si_status = SIGCONT; - } -#endif - else - /* Can't happen. */ - assert (! "What?"); return 0; } -#endif - - -int -__waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options) -{ - /* __waitpid should be a cancellation point. */ - return do_waitid (idtype, id, infop, options); -} weak_alias (__waitid, waitid) strong_alias (__waitid, __libc_waitid)