Wolfgang Grandegger wrote:
 > Hi Gilles,
 > 
 > Gilles Chanteperdrix wrote:
 > > On Dec 6, 2007 3:05 PM, Wolfgang Grandegger <[EMAIL PROTECTED]> wrote:
 > >> Gilles Chanteperdrix wrote:
 > >>> On Dec 6, 2007 2:28 PM, Gilles Chanteperdrix
 > >>> <[EMAIL PROTECTED]> wrote:
 > >>>> On Dec 6, 2007 2:24 PM, Wolfgang Grandegger <[EMAIL PROTECTED]> wrote:
 > >>>>> Gilles Chanteperdrix wrote:
 > >>>>>> On Dec 6, 2007 1:31 PM, Wolfgang Grandegger <[EMAIL PROTECTED]> wrote:
 > >>>>>>> Hello,
 > >>>>>>>
 > >>>>>>> how do I cancel or delete a Xenomai POSIX thread running in primary
 > >>>>>>> context from a higher priority thread? IIUC, pthread_kill() can only 
 > >>>>>>> be
 > >>>>>>> used in secondary context. I tried pthread_cancel(), but it only 
 > >>>>>>> works
 > >>>>>>> when hitting a cancelation point, e.g. pthread_testcancel(). Setting
 > >>>>>>> pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS) did not help. Is
 > >>>>>>> there a code snippet or even an example program showing how to 
 > >>>>>>> cancel a
 > >>>>>>> pthread in primary context?
 > >>>>>> pthread_kill or pthread_cancel should result in sending a signal to
 > >>>>>> the target thread, so should cause this thread to switch to secondary
 > >>>>>> mode to handle it. If you want to wait for the target thread to be
 > >>>>>> canceled, you should use pthread_cancel and pthread_join.
 > >>>>> There is no way to cancel a pthread in primary mode from another 
 > >>>>> pthread?
 > >>>> No. You always need secondary mode to effectively delete a thread. The
 > >>>> same goes for the native skin.
 > >>> Ok. I understand what you mean. You want pthread_cancel not to leave
 > >>> primary mode. This can easily be done by causing pthread_cancel to use
 > >>> the kernel-space real-time pthread_cancel service. This should work
 > >>> with no further modification.
 > >> I want to cancel/delete a task running in primary mode, e.g.
 > >>
 > >>   void* work_task(void* dummy)
 > >>   {
 > >>         int count = 0;
 > >>         while (1)
 > >>                 count++;
 > >>   }
 > >>
 > >> from the outside (= another higher priority task). How can I use the
 > >> kernel-space real-time pthread_cancel service? My POSIX app is runs in
 > >> user-land.
 > > 
 > > I was thinking about adding a pthread_cancel syscall that would have
 > > triggered the kernel-space pthread_cancel. But this will not work:
 > > user-space cleanup handlers would no longer get executed. However,
 > > this can work for pthread_kill. Here is a patch which adds the
 > > pthread_kill syscall.
 > 
 > Great, thanks a lot. This seems to work but I'm now fiddling with proper
 > cleanup and exit. I have attached my small test program. It behaves
 > somehow strange, at least to me:
 > 
 > - I see task period overruns when the low prio task is started. I
 >   suspect some switch to secondary mode in init_task().
 > 
 > - The program/system hangs after the listed messages:
 > 
 >   # ./kill_pthread
 >   Starting high_prio_task
 >   Killed low_prio task: count=3813129, overruns=0
 > 
 > Any idea what I'm doing wrong?
 > 
 > This is with Linux 2.4.25 and Xenomai 2.3.x on a MPC5200 board.

Your test runs fine with Xenomai trunk (on ARM). I will now try with
current state of the v2.3.x branch.

-- 


                                            Gilles Chanteperdrix.

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

Reply via email to