All of lore.kernel.org
 help / color / mirror / Atom feed
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.




  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.