Re: [PATCH] pager: exit without error on SIGPIPE
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Jan 30, 2021, 12:52 UTC
- Message-ID
- <869ba84b-a008-6061-be57-50ab678a154e@kdbg.org>
- In-Reply-To
- <a3e738e2-695e-cf01-5d01-50b6fea272ec@kdbg.org>
Am 30.01.21 um 09:29 schrieb Johannes Sixt:
Show 22 quoted lines
> Am 30.01.21 um 00:48 schrieb Denton Liu:
>> +++ b/t/helper/test-pager.c
>> @@ -0,0 +1,12 @@
>> +#include "test-tool.h"
>> +#include "cache.h"
>> +
>> +int cmd__pager(int argc, const char **argv)
>> +{
>> + if (argc > 1)
>> + usage("\ttest-tool pager");
>> +
>> + setup_pager();
>> + for (;;)
>> + puts("y");
>> +}
>
> My gut feeling tells that this will end in an infinite loop on Windows.
> There are no signals on Windows that would kill the upstream of a pipe.
> This call site will only notice that the downstream of the pipe was
> closed, when it checks for write errors.
>
> Let me test it.The test case is protected by a TTY prerequisite; that is not satisfied on Windows, and the test is skipped. No harm done so far.
But when I run `test-tool pager` manually and quit out of the pager, the tool does spin in the endless loop. The following fixup helps.
diff --git a/t/helper/test-pager.c b/t/helper/test-pager.c index feb68b8643..5f1982411f 100644 --- a/t/helper/test-pager.c +++ b/t/helper/test-pager.c @@ -7,6 +7,8 @@ int cmd__pager(int argc, const char **argv) usage("\ttest-tool pager"); setup_pager(); - for (;;) - puts("y"); + while (write_in_full(1, "y\n", 2) > 0) + ; + + return 0; }
-- 2.30.0.119.g680bcb97f5