From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: zsh-workers-return-43653-ml=inbox.vuxu.org@zsh.org X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id e55c9e9c for ; Tue, 9 Oct 2018 08:49:38 +0000 (UTC) Received: (qmail 16709 invoked by alias); 9 Oct 2018 08:49:26 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43653 Received: (qmail 9465 invoked by uid 1010); 9 Oct 2018 08:49:26 -0000 X-Qmail-Scanner-Diagnostics: from mailout2.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.12):SA:0(-7.3/5.0):. Processed in 1.838387 secs); 09 Oct 2018 08:49:26 -0000 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20181009084919euoutp02ba48cda94fc0fc3aabd7f281561e1bf9~b5IWMWnx61227012270euoutp02g DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1539074959; bh=y5Bqup6Rs9PP1CGKCueOa7jLUg4RMYM8z2HJWiGFYD8=; h=Subject:From:To:Date:In-Reply-To:References:From; b=K8T5JRiDb4ovtzfg4GmqEiommlMFc5xLiNc2tpfKrH8O29FzvfKeOVLkXxcRqpskD bvOPdBNMPgYc2mRN022ukyjp5eBz4gqzlnzQJ0yARgGujd6fExyjzBaSBT9BV5d1BW FT5mVvnrZfVa2l+N7v7yQTlPAbYwJ7X15LPmRt+I= X-AuditID: cbfec7f5-34dff700000012c6-58-5bbc6b8e5902 Subject: Re: [Bug] Exiting shell from function called by trap handler always produces status 0 From: Peter Stephenson To: Date: Tue, 9 Oct 2018 09:49:16 +0100 In-Reply-To: X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsWy7djP87p92XuiDab3mFkcbH7I5MDoserg B6YAxigum5TUnMyy1CJ9uwSujPU/trAVvOKruNDcz9rAuISni5GTQ0LAROJ1dy9bFyMXh5DA CkaJRasfsIEkhAT6mCTau+0hEr1MEgd+XGWD6bjT/QKqYzmjxJ2FL5nhqnYdOg3VfppRouGm NIR9nlFi1/F8EFtYIEHiyZd2FhCbTcBQYuqm2YwgtoiApMS15tNgNouAisTC6y/A5nAK2Ej8 3TSTHWKzhsSGm8eYQGxeAUGJkzOfgM1hFpCXaN46G+wICYHHbBKzz+1jhCgqkzi85xczRLOL xKYD56FeEJZ4dXwL1FAZidOTe1ggmtsZJdZMes0O4fQwSmw6eocRospaou/2RSCbA2idpsT6 XfoQYUeJV9Nvs4CEJQT4JG68FYQ4iE9i0rbpzBBhXomONiGIajWJHU1bGSHCMhJP1yhMYFSa heSbWUi+mYWwagEj8ypG8dTS4tz01GLjvNRyveLE3OLSvHS95PzcTYzARHD63/GvOxj3/Uk6 xCjAwajEwzsjb3e0EGtiWXFl7iFGCQ5mJRFe0e27ooV4UxIrq1KL8uOLSnNSiw8xSnOwKInz Lpu3MVpIID2xJDU7NbUgtQgmy8TBKdXAuMp2cvR8Kc9WRcXJup377i3l5RG1eZvPLG5TuCPy WdbXiBXd95efvFf1M/DyztcLY3dOLE+xbJ0tpmR3IK1j6cM+6Y9lt42tku/lMWns9J7HHx2Y qf/CI8BgdcZV/4aG1dL/2sr6LjdHGMyZ9zN9QraXe03GhyPT512zqxW6FtI3rS7vsd0xJZbi jERDLeai4kQABEyOdwADAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpikeLIzCtJLcpLzFFi42I5/e/4Pd2+7D3RBqtFLQ42P2RyYPRYdfAD UwBjlJ5NUX5pSapCRn5xia1StKGFkZ6hpYWekYmlnqGxeayVkamSvp1NSmpOZllqkb5dgl7G +h9b2Ape8VVcaO5nbWBcwtPFyMkhIWAicaf7BVsXIxeHkMBSRolH554wQyRkJD5d+cgOYQtL /LnWBVXUzSQx5cczRgjnNKPEp5fvmCGc84wS/6/OZwVp4RUwlPj7/SgjiC0skCDx5Es7C4jN BhSfumk2WFxEQFLiWvNpMJtFQEVi4XWQOzg5OAVsJP5umskOMXQCo8S5j7fAEswCmhKt239D 3aQhseHmMSaIZYISJ2c+YYGokZdo3jqbeQKj0CwkLbOQlM1CUraAkXkVo0hqaXFuem6xoV5x Ym5xaV66XnJ+7iZGYPhvO/Zz8w7GSxuDDzEKcDAq8fDOyNsdLcSaWFZcmXuIUYKDWUmEV3T7 rmgh3pTEyqrUovz4otKc1OJDjKZAH01klhJNzgfGZl5JvKGpobmFpaG5sbmxmYWSOO95g8oo IYH0xJLU7NTUgtQimD4mDk6pBkYn1SVyVX2VNv83GVzuagjReXMnuO4g8zWm1p86S5YXLf64 RKfuxfYX0j2vGLmO/4r4sLVPoFnLS3XWErZStq9e3AHytzl/lLlN6FLdd8VdmH/LjEevdWf5 JX8xMDyyUu/e5LkrLVX01waZxt/ULNyw03a7p9/CxvZFOhE+bz7lLn/QMfHjUQclluKMREMt 5qLiRABUz0ellQIAAA== Message-Id: <20181009084918eucas1p27dedda10d51beb773ba9175967912d2c~b5IUtvcVK3037630376eucas1p2R@eucas1p2.samsung.com> X-CMS-MailID: 20181009084918eucas1p27dedda10d51beb773ba9175967912d2c X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20181009012624epcas1p44f2ae223f663713a980af4be735e5a3f X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20181009012624epcas1p44f2ae223f663713a980af4be735e5a3f References: On Mon, 2018-10-08 at 14:02 +0100, Martijn Dekker wrote: > When a trap handler exits the shell using the 'exit' command within a  > function, the shell's exit status is zero even if another exit status  > was given as an argument to the 'exit' command. >  > $ Src/zsh -c 'fn() { exit 13; }; trap "fn" EXIT' > $ echo $? > 0 > (expected output: 13) diff --git a/Src/builtin.c b/Src/builtin.c index c5b319b..b81acdb 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -5709,7 +5709,13 @@ int shell_exiting;  mod_export void  zexit(int val, int from_where)  { -    /* Don't do anything recursively:  see below */ +    static int exit_val; +    /* +     * Don't do anything recursively:  see below. +     * Do, however, update exit status --- there's no nesting, +     * a later value always overrides an earlier. +     */ +    exit_val = val;      if (shell_exiting == -1)   return;   @@ -5757,7 +5763,7 @@ zexit(int val, int from_where)  #endif   }      } -    lastval = val; +    lastval = exit_val;      /*       * Now we are committed to exiting any previous state       * is irrelevant.  Ensure trap can run. @@ -5771,9 +5777,9 @@ zexit(int val, int from_where)         release_pgrp();      }      if (mypid != getpid()) - _exit(val); + _exit(exit_val);      else - exit(val); + exit(exit_val);  }    /* . (dot), source */ diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index dce263f..3b5d4c6 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -863,6 +863,9 @@ F:Must be tested with a top-level script rather than source or function  >a  >b   +  $ZTST_testdir/../Src/zsh -fc 'fn() { exit 13; }; trap fn EXIT; exit' +13:Explicit exit in exit trap overrides status +  %clean      rm -f TRAPEXIT