Gilles Chanteperdrix wrote:
> Wolfgang Grandegger wrote:
>> Gilles Chanteperdrix wrote:
>>> Wolfgang Grandegger wrote:
>>>> Gilles Chanteperdrix wrote:
>>>>> Wolfgang Grandegger wrote:
>>>>>> Running under gdb shows:
>>>>>>
>>>>>>   Program received signal SIGSEGV, Segmentation fault.
>>>>>>   [Switching to Thread 0x4885d4b0 (LWP 1127)]
>>>>>>   0x0ff49100 in pthread_cancel () from /lib/libpthread.so.0
>>>>>>   (gdb) where
>>>>>>   #0  0x0ff49100 in pthread_cancel () from /lib/libpthread.so.0
>>>>>>   #1  0x10001d64 in ctrl_func (parm=0x0) at cancel-test.c:104
>>>>>>   #2  0x0ffa98e4 in __pthread_trampoline ()
>>>>>>      from /home/wolf/xenomai/lib/libpthread_rt.so.1
>>>>>>   #3  0x0ff42a6c in start_thread () from /lib/libpthread.so.0
>>>>>>   #4  0x0fdd18a0 in clone () from /lib/libc.so.6
>>>>>>   Backtrace stopped: previous frame inner to this frame (corrupt stack?)
>>>>>>
>>>>>> Is pthread_cancel used from the Linux pthread library? And
>>>>>> pthread_testcancel() as well?
>>>>> Yes, and I guess, as you said, that it happens because calc_func is dead
>>>>> when you try and cancel it.
>>>> Yep, but it should not crash.
>>> The spec says:
>>> The pthread_cancel() function may fail if:
>>>
>>> [ESRCH]
>>>     No thread could be found corresponding to that specified by the
>>> given thread ID.
>>>
>>>
>>> So, it is a "may", returning ESRCH, as Xenomai does in kernel-space, is
>>> not mandatory.
>> I also got the return value ESRCH in another test. Nevertheless, a crash
>> is not the expected behaviour, to say the least. Here pthread_cancel()
>> obvoiusly get's interrupted and the calc_thread continues. Is it
>> possible that pthread_cancel() switches to secondary mode?
> 
> pthread_cancel switches to secondary mode if it has to send a signal (if
> cancellation is in asynchronous mode, this happens when the target
> thread is blocked inside a blocking call). But this should not be a
> problem with RPI.

I disabled priority coupling in the kernel and it did not help or harm.
This test uses PTHREAD_CANCEL_DEFERRED, which is  also the default, if
I understood correctly.

> But the problem you should focus on is why the scheduler does not let
> pthread_cancel run earlier.

Don't know what you mean. The calc_func gets preempted and the ctrl_func
calls pthread_cancel as expected...

  calc_func: at count 20
  calc_func: at count 21
  calc_func: at count 22
  ctrl_func: cancel at count 23
  ^^^^^^^^^
  calc_func: at count 23

But then it stops somehow in pthread_cancel and calc_func continues to run.

Wolfgang.


_______________________________________________
Xenomai-help mailing list
Xenomai-help@gna.org
https://mail.gna.org/listinfo/xenomai-help

Reply via email to