pthread_cancel / sleep change in behaviour

Erich Dollansky erichsfreebsdlist at
Thu Sep 3 01:14:44 UTC 2015


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?


More information about the freebsd-stable mailing list