Jan Kiszka wrote:
Philippe Gerum wrote:
Jan Kiszka wrote:
during my ongoing search for the init/cleanup issue of shadow threads, I
stumbled over another problem: Deleting a userspace native thread that
is blocked in primary mode does not let the NPTL clean up all resources
allocated in userspace. If you plan to do some rt_task_create/delete in
a loop, you will soon run out of memory (and Mr. oom-killer will show
I haven't found a solution for this beyond letting a rt-task always
terminate itself (or terminate the whole program after forced
deletions). If there is no solution, we should at least document this
Again, it's not a common use case, but it's also not an expectable
behaviour of the native skin.
I see no possible workaround to allow a shadow thread deletion from
kernel space while still leaving the opportunity for the NPTL thread to
perform some user-space cleanups; recycling a previous Xenomai context
to unwind a Linux context would lead to some terminally broken
situation, so the nucleus must reap the terminated shadow at kernel
level asap. However, the rt_task_delete() wrapper from the user-space
support library might preferably pthread_kill() the thread, instead of
asking the nucleus for that purpose.
Hmm, I think I've read something about signal delivery and handling in
threads which said that the delivery is per thread, but the handling
remains to affect the whole process. Thus, I'm afraid we may kill
ourselves here and not just the thread...
If the signal ends up being lethal, yes. All threads would be wiped out.
I was thinking of catching a signal to perform a per-thread cleanup
over the terminated context and pthread_exit later on.
Ok, Versuch macht klug (in English: just give it a try)!