Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 May 2023 21:21:36 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Dag-Erling =?utf-8?B?U23DuHJncmF2?= <des@freebsd.org>
Cc:        src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 5807f35c541c - main - dd: Fix SIGINT handling.
Message-ID:  <ZFVJMIKu4v4OnPZL@kib.kiev.ua>
In-Reply-To: <202305051245.345CjNLE048275@gitrepo.freebsd.org>
References:  <202305051245.345CjNLE048275@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, May 05, 2023 at 12:45:23PM +0000, Dag-Erling Smørgrav wrote:
> The branch main has been updated by des:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=5807f35c541c26bbd91a3ae12506cd8dd8f20688
> 
> commit 5807f35c541c26bbd91a3ae12506cd8dd8f20688
> Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
> AuthorDate: 2023-05-05 11:17:44 +0000
> Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
> CommitDate: 2023-05-05 12:42:32 +0000
> 
>     dd: Fix SIGINT handling.
>     
>     Currently, we handle SIGINT by calling summary() and _exit() directly from the signal handler, which we install after setup().  There are several issues with this:
>     
>     * summary() is not signal safe;
>     * the parent is not informed about the signal;
>     * setup() can block on open(), and catching SIGINT at that stage will produce the correct exit status but will not print anything to stderr as POSIX demands.
>     
>     Fix this by making SIGINT non-restartable, changing our signal handler to only set a flag, installing it before setup(), and checking the termination flag before and after every blocking operation, i.e. open(), read(), write().
>     
>     Also add two test cases, one for catching SIGINT while opening the input and one for catching it while reading.  I couldn't think of an easy way to test catching SIGINT while writing (it's certainly feasible, but perhaps not from a shell script).
>     

This does not fix SIGINT handler, it only (significantly) reduces the window
where the issue could occur.  See my latest comment on the review.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ZFVJMIKu4v4OnPZL>