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

Stefan Liebler stli@linux.vnet.ibm.com
Tue May 17 11:50:00 GMT 2016


On 05/17/2016 09:18 AM, Florian Weimer wrote:
> 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
>
Oops. Thanks.

Committed with your comments.



More information about the Libc-alpha mailing list