Gilles Chanteperdrix wrote: > Jan Kiszka wrote: >> Gilles Chanteperdrix wrote: >>> GIT version control wrote: >>>> Module: xenomai-jki >>>> Branch: for-upstream >>>> Commit: 0352b068600bd4ef3172c8a42416badbcdad32ca >>>> URL: >>>> http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=0352b068600bd4ef3172c8a42416badbcdad32ca >>>> >>>> Author: Jan Kiszka <jan.kis...@siemens.com> >>>> Date: Wed Apr 28 15:08:11 2010 +0200 >>>> >>>> native: Rework handling of pthread carrier thread >>>> >>>> This patch improves two pitfalls of libnative's interaction with >>>> underlying pthreads: >>>> >>>> First, it tries to detect double deletions (cancellations or joinings) >>>> of pthreads and report them via an error code. This reduces the risk to >>>> trigger a SIGSEGV accessing meanwhile released pthread objects. And >>>> second, it properly detaches joinable pthreads when they are deleted >>>> instead. This properly releases the pthread resources. >>> I really do not understand that. What is the point of creating a >>> joinable thread if you do not want to join it once it has been canceled? >>> >> Keep in mind that there is no pthread_cancel equivalent in the native >> API. Moreover, even POSIX has pthread_detach so that you are not forced >> to join every joinable thread. I could imagine that one may want to use >> this fot error cleanups. But first of all this is about improving the >> API consistency and fault tolerance. > > I have no strong opinion on that matter, but it looks to me like the > "joinable" stuff in the native API is made to look like the posix > equivalent, following the principle of least surprise. So, since posix > requires joining a thread after canceling, it should be necessary to > join a thread after deleting it.
The problem is that there is no direct equivalent to rt_task_delete with pthread. What comes closest is pthread_cancel + pthread_detach (where required). Still, rt_task_delete is synchronous, pthread_cancel not. > > As for pthread_detach, its main justification is a corner case: being > able to avoid leaks when canceling a thread which was blocked in a call > to pthread_join by calling pthread_detach in the cancelation cleanup > handler. > > The reason for the way the native API is, is that you may delete a > thread which is in fact running in another process. And I am not sure > the patch you sent addresses this issue. I does not. And thinking about it, I guess we should simply deny remote deletion of joinable tasks as there is no reasonable way to cleanly release the remote pthread resources. I could post an update for code and docs on top of this. Jan
Description: OpenPGP digital signature
_______________________________________________ Xenomai-core mailing list Xenomaifirstname.lastname@example.org https://mail.gna.org/listinfo/xenomai-core