[PATCH] Fix tst-cancel17/tst-cancelx17, which sometimes segfaults while exiting.

Florian Weimer fweimer@redhat.com
Tue May 17 08:06:00 GMT 2016


On 05/17/2016 08:57 AM, Stefan Liebler wrote:
>     	* nptl/tst-cancel17.c (do_test): Wait for finishing aio_read(&a).

Nice analysis.  Looks good to me.

> diff --git a/nptl/tst-cancel17.c b/nptl/tst-cancel17.c
> index fb89292..9ff4e27 100644
> --- a/nptl/tst-cancel17.c
> +++ b/nptl/tst-cancel17.c
> @@ -333,6 +333,22 @@ do_test (void)
>
>    puts ("early cancellation succeeded");
>
> +  if (ap == &a2)
> +    {
> +      /* The aio_read(&a) was not canceled, because the read request was
> +	 already in progress. In the meanwhile aio_write(ap) wrote something
> +	 to the pipe and the read request either has already been finished or
> +	 is able to read the requested byte.
> +	 Wait for the read request before returning from this function, because
> +	 the return value and error code from the read syscall will be written
> +	 to the struct aiocb a, which lays on the stack of this function.
> +	 Otherwise the stack from subsequent function calls - e.g. _dl_fini -
> +	 will be corrupted, which can lead to undefined behaviour like a
> +	 segmentation fault.  */

I think it should be “which *lies* on the stack” (the intransitive 
variant), and a comma before “because“ is frowned upon in some circles.

Thanks,
Florian



More information about the Libc-alpha mailing list