Date: Thu, 3 Sep 2015 08:00:47 +0800 From: Erich Dollansky <erichsfreebsdlist@alogt.com> To: freebsd-threads@freebsd.org Cc: FreeBSD stable <freebsd-stable@freebsd.org> Subject: pthread_cancel / sleep change in behaviour Message-ID: <20150903080047.16be939e@X220.alogt.com>
next in thread | raw e-mail | index | archive | help
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? Erich
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150903080047.16be939e>