From: Wolfgang Grandegger <wg@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: xenomai-help <xenomai@xenomai.org>
Subject: Re: [Xenomai-help] pthread cancelation and scheduling magics
Date: Tue, 02 Dec 2008 19:18:42 +0100 [thread overview]
Message-ID: <49357C02.1090001@domain.hid> (raw)
In-Reply-To: <49355A59.4050600@domain.hid>
Gilles Chanteperdrix wrote:
> Wolfgang Grandegger wrote:
>> Hi Gilles,
>>
>> Gilles Chanteperdrix wrote:
>>> Gilles Chanteperdrix wrote:
>>>>>> Now, the question is, do you realistically plan to write an application
>>>>>> which makes no syscall in its real-time loop?
>>>>> Unlikely, but it may happen in case of programming errors. Anyhow, the
>>>>> pthreads will run legacy code and it would be a pain to add
>>>>> pthread_testcancel where necessary. But maybe there is a more elegant
>>>>> and simple solution to do a defined exit/abort.
>>>> In case of programming error, enable the xenomai watchdog, it will
>>>> forcibly kill the problematic thread.
>>> To give you a more complete answer: most blocking functions are
>>> cancellation points in the PTHREAD_CANCEL_DEFERRED case, so, you
>>> probably do not need to add pthread_testcancel at all. The only
>>> exception is pthread_mutex_lock: this way, cancellation happens for well
>>> defined mutex states, and you may install cleanup handlers with
>>> pthread_cleanup_push/pthread_cleanup_pop if ever a thread may be
>>> destroyed while holding a mutex. With PTHREAD_CANCEL_ASYNCHRONOUS, the
>>> situation is not that clean.
>> Well, there seems something wrong with it, also PTHREAD_CANCEL_DEFERRED
>> with pthread_testcancel does not work reliably and consistently and it
>> still behaves different on my ARM and PowerPC systems. I have attached
>> my revised test program allowing to enable/disable various method of
>> thread creation, setup and cancellation. They all work fine with the
>> Linux POSIX libraries. With Xenomai, only a few work as expected on my
>> ARM and PowerPC test systems.
>
> Could you explain us exactly what happens
OK, with the definitions
//#define USE_SIGXCPU
//#define USE_EXPLICIT_SCHED
#define CANCEL_TYPE PTHREAD_CANCEL_DEFERRED
//#define CANCEL_TYPE PTHREAD_CANCEL_ASYNCHRONOUS
#define USE_TEST_CANCEL
I get on my ARM MX31ADS system:
-bash-3.2# ./cancel-test
Real-Time debugging started
Segmentation fault
The program behaves differently when running under gdb but the
segmentation fault happens somewhere in pthread_cancel. It works better
on my PowerPC TQM5200 system:
-bash-3.2# ./cancel-test
Real-Time debugging started
ctrl_func: started at count 0
ctrl_func: sleeping for 2sec 500000000ns
calc_func: counting till 50
calc_func: at count 0
calc_func: at count 1
calc_func: at count 2
calc_func: at count 3
calc_func: at count 4
calc_func: at count 5
calc_func: at count 6
calc_func: at count 7
calc_func: at count 8
calc_func: at count 9
calc_func: at count 10
calc_func: at count 11
calc_func: at count 12
calc_func: at count 13
calc_func: at count 14
calc_func: at count 15
calc_func: at count 16
calc_func: at count 17
calc_func: at count 18
calc_func: at count 19
calc_func: at count 20
calc_func: at count 21
calc_func: at count 22
ctrl_func: cancel at count 23
ctrl_func: stopped at count 23
main terminating in 2 seconds...
But the messages from calc_func are display before the task gets
actually canceled, which I do not understand. On ARM, it behaves similar
if I disable explicit setting of the cancellation type:
//#define USE_SIGXCPU
//#define USE_EXPLICIT_SCHED
//#define CANCEL_TYPE PTHREAD_CANCEL_DEFERRED
//#define CANCEL_TYPE PTHREAD_CANCEL_ASYNCHRONOUS
#define USE_TEST_CANCEL
Enabling/disabling other options does not work as expected either, like
using USE_EXPLICIT_SCHED. The cancellation does then not work any more.
Wolfgang.
next prev parent reply other threads:[~2008-12-02 18:18 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-30 21:34 [Xenomai-help] pthread cancelation and scheduling magics Wolfgang Grandegger
2008-11-30 21:46 ` Gilles Chanteperdrix
2008-11-30 21:59 ` Gilles Chanteperdrix
2008-12-01 10:22 ` Gilles Chanteperdrix
2008-12-01 14:16 ` Wolfgang Grandegger
2008-12-01 14:15 ` Gilles Chanteperdrix
2008-12-01 15:10 ` Gilles Chanteperdrix
2008-12-02 15:59 ` Wolfgang Grandegger
2008-12-02 15:55 ` Gilles Chanteperdrix
2008-12-02 18:18 ` Wolfgang Grandegger [this message]
2008-12-02 18:35 ` Gilles Chanteperdrix
2008-12-02 19:50 ` Wolfgang Grandegger
2008-12-02 20:03 ` Philippe Gerum
2008-12-07 16:05 ` Wolfgang Grandegger
2008-12-10 11:16 ` Wolfgang Grandegger
2008-12-11 15:26 ` Jan Kiszka
2008-12-13 15:55 ` Wolfgang Grandegger
2009-01-01 13:34 ` Gilles Chanteperdrix
2009-01-01 17:07 ` Philippe Gerum
2009-01-01 18:00 ` Gilles Chanteperdrix
2009-01-09 13:08 ` Gilles Chanteperdrix
2009-01-09 13:38 ` Philippe Gerum
2009-01-01 17:10 ` Wolfgang Grandegger
2009-01-01 18:11 ` Gilles Chanteperdrix
2008-12-03 10:16 ` Gilles Chanteperdrix
2008-12-03 11:19 ` Wolfgang Grandegger
2008-12-03 13:30 ` Gilles Chanteperdrix
2008-12-03 18:02 ` Wolfgang Grandegger
2008-12-03 17:57 ` Gilles Chanteperdrix
2008-12-03 18:37 ` Wolfgang Grandegger
2008-12-03 18:32 ` Gilles Chanteperdrix
2008-12-03 18:55 ` Wolfgang Grandegger
2008-12-03 18:55 ` Gilles Chanteperdrix
2008-12-03 19:19 ` Wolfgang Grandegger
2008-12-03 19:19 ` Gilles Chanteperdrix
2008-12-03 20:02 ` Wolfgang Grandegger
2008-12-03 20:02 ` Gilles Chanteperdrix
2008-12-04 15:29 ` Wolfgang Grandegger
2008-12-04 15:38 ` Gilles Chanteperdrix
2008-12-04 15:42 ` Gilles Chanteperdrix
2008-12-04 16:31 ` Wolfgang Grandegger
2008-12-04 16:26 ` Gilles Chanteperdrix
2008-12-04 16:49 ` Wolfgang Grandegger
2008-12-04 17:02 ` Gilles Chanteperdrix
2008-12-04 17:52 ` Wolfgang Grandegger
2008-12-04 17:51 ` Gilles Chanteperdrix
2008-12-05 14:58 ` Wolfgang Grandegger
2008-12-03 8:04 ` Wolfgang Grandegger
2008-12-03 10:12 ` Gilles Chanteperdrix
2008-12-03 10:46 ` Wolfgang Grandegger
2008-12-03 10:40 ` Gilles Chanteperdrix
2008-12-03 11:16 ` Wolfgang Grandegger
2008-12-03 11:11 ` Philippe Gerum
2008-12-03 11:22 ` Wolfgang Grandegger
2008-12-01 13:31 ` Wolfgang Grandegger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49357C02.1090001@domain.hid \
--to=wg@domain.hid \
--cc=gilles.chanteperdrix@xenomai.org \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.