Gilles Chanteperdrix wrote:
> On Dec 11, 2007 2:20 PM, Wolfgang Grandegger <[EMAIL PROTECTED]> wrote:
>> Wolfgang Grandegger wrote:
>>> The attached test application using a more sophisticated signal handling
>>> works fine on my MPC5200-board running Linux 2.6.23 and Xenomai trunk.
>>> Going to try it tomorrow on my PC.
>> It works fine as well on my PC with Linux 2.6.23 and Xenomai trunk and
>> now also with Linux 2.4.25 and Xenomai 2.3.x :-). Just to understand it
>> right: The task signaled with pthread_kill() will be suspended and
>> switches to secondary mode if it was running in primary mode. The signal
>> will then be handled by Linux as usual. When the task resumes, does it
>> get switched back to primary mode automatically?
> 
> No, it will get swtiched back to primary mode only if it calls a
> service needing primary mode.

OK.

>> Great, the only open issue is why executing init_task() switches to
>> secondary mode resulting in period overruns in high_prio_task(). Is that
>> obvious to you?
> 
> init_task calls pthread_create, which needs running in secondary mode
> to create a thread. We can not create a task without help from
> secondary mode.

OK.

I was a bit quick with my assumption that it works with 2.4. It actually
only works, if I have a pthread_set_mode_np() in the while loop of the
primary task:

        while (1) {
                pthread_set_mode_np(0, PTHREAD_PRIMARY);
                count++;
        }

Without pthread_set_mode_np(), the system hangs after the following
output lines:

  bash-2.05b# ./kill_pthread2
  Starting high_prio_task
  low_prio_task: policy=1 prio=5
  SIGUSER1 to id_low: count=17497245, overruns=0

It seems to hang when the low_prio_task() calls pthread_wait_np()
thereafter. Any quick idea where the problem is?

Wolfgang.


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

Reply via email to