On Thu, Sep 03, 2015 at 08:00:47AM +0800, Erich Dollansky
wrote:> Hi,
>
> I noticed a change in behaviour when calling pthread_cancel for a
> thread which is sleeping using i.e. sleep ().
>
> How I understand pthread_cancel, it should cancel the thread and call
> the clean up handler soon after its return. Important is that the
> cancelled thread waited on a cancellation point.
>
> When I started testing our application under error conditions, I found
> problems I could not explain. As the application's target is a
> Raspberry, some tests have been done on a 10.1 on the Raspberry and
> some on a amd64 machine running 10.2 STABLE. The behaviour on the
> Raspberry was as expected but not on the amd64.
>
> The situation is now that there are always pairs of threads. One thread
> does the work, the other thread just does a sleep() and cancels the
> worker thread at the end. But, when the worker thread finishes its work
> normally, it cancels the sleeping thread and then returns.
>
> After some time of testing I found out that pthread_cancel calls the
> clean up handler of the sleeping thread only after sleep()'s return
> when running on 10.2 STABLE on amd64 but calls the clean up handler
> soon after cancellation on 10.1 on the Raspberry.
>
> Is this change of behaviour a feature or a bug?
Provide a minimal example demonstrating the issue.