* [Xenomai-help] rt_task_delete trouble
@ 2011-03-11 8:28 Johann Obermayr
2011-03-11 8:51 ` Gilles Chanteperdrix
0 siblings, 1 reply; 9+ messages in thread
From: Johann Obermayr @ 2011-03-11 8:28 UTC (permalink / raw)
To: xenomai
[-- Attachment #1: Type: text/plain, Size: 3527 bytes --]
Hello,
i'm a newbie with xenomai.
My problem is, if a rt task will delete with rt_task_delete, than
the progam hangs.
here is my sample
----------------------------------
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/mman.h>
#include <native/mutex.h>
#include <native/task.h>
#include <native/types.h>
#include <rtdk.h>
RT_TASK task_waiter, task_worker;
volatile int task_waiter_flag = 0;
#define DELAYS(x) (x * 1000 * 1000 * 1000)
#define DELAYMS(x) (x * 1000 * 1000)
void delaysec(unsigned int sec)
{
RTIME delay = DELAYS(sec);
rt_task_sleep( delay );
}
void task_waiter_do(void *data)
{
rt_printf("task_waiter_do started\n");
while(task_waiter_flag == 0)
; // rt_task_sleep( DELAYMS(1) );
rt_printf("task_waiter_do finished\n");
}
void task_worker_do(void *data)
{
int rval;
rt_printf("task_worker_do started\n");
delaysec(1);
rt_printf("task_worker_do suspend waiter\n");
rval = rt_task_suspend(&task_waiter);
rt_printf("task_worker_do suspend:%d\n", rval);
delaysec(1);
rt_printf("task_worker_do delete waiter\n");
rval = rt_task_delete(&task_waiter);
rt_printf("task_worker_do delete:%d\n", rval);
delaysec(1);
while(task_waiter_flag == 0)
rt_task_sleep( DELAYMS(10) );
rt_printf("task_worker_do finished\n");
}
int main(int argc, char **argv)
{
int rval;
mlockall(MCL_CURRENT|MCL_FUTURE);
printf("Starting\n");
rt_print_auto_init(1);
rval = rt_task_create(&task_worker, "worker", 0, 80, 0);
if (rval == 0) {
rval = rt_task_create(&task_waiter, "waiter", 0, 30, 0);
rval = rt_task_start(&task_worker, &task_worker_do, NULL);
if (rval == 0) {
rval = rt_task_start(&task_waiter, &task_waiter_do, NULL);
if (rval == 0) {
printf("Working\n");
}
else
rt_printf("rt_task_suspend failed(%d)", rval);
}
else
rt_printf("rt_task_start failed(%d)", rval);
}
else
rt_printf("rt_task_create failed(%d)", rval);
printf("Finsihed <press any key>\n");
getchar();
task_waiter_flag = 1;
usleep(100000);
return 0;
}
----------------------------------
the task task_worker_do will hang after rt_task_delete. Why ?
if i add a sleep into task_waiter_do, the sample work correct.
What can i do, to solve this.
Thanks
greetings
Johann
--
Mit freundlichen Grüßen, best regards
Johann Obermayr
Software Entwicklung
________________________________________________
SIGMATEK GmbH& Co KG
Sigmatekstraße 1
5112 Lamprechtshausen
Österreich / Austria
Tel. : +43 / 6274/ 43 21-0 (Durchwahl leider nicht möglich)
Fax : +43 / 6274/ 43 21-18 (bzw 300 im Werk 2 )
E-Mail:johann.obermayr@domain.hid
http://www.sigmatek-automation.com
****************************Please note:********************************
This email and all attachments are confidential and intended solely for
the person or entity to whom it is addressed. If you are not the named
addressee you must not make this email and all attachments accessible
to any other person. If you have received this email in error please
delete it together with all attachments.
************************************************************************
[-- Attachment #2: Type: text/html, Size: 5267 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 8:28 [Xenomai-help] rt_task_delete trouble Johann Obermayr
@ 2011-03-11 8:51 ` Gilles Chanteperdrix
2011-03-11 8:58 ` Jan Kiszka
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Gilles Chanteperdrix @ 2011-03-11 8:51 UTC (permalink / raw)
To: johann.obermayr; +Cc: xenomai
Johann Obermayr wrote:
> void task_waiter_do(void *data)
> {
> rt_printf("task_waiter_do started\n");
> while(task_waiter_flag == 0)
> ; // rt_task_sleep( DELAYMS(1) );
> rt_printf("task_waiter_do finished\n");
> }
What happens if you uncomment the rt_task_sleep here ?
Could you please give us some more information:
http://www.xenomai.org/index.php/Request_for_information
Do you have priority coupling enabled?
--
Gilles.
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 8:51 ` Gilles Chanteperdrix
@ 2011-03-11 8:58 ` Jan Kiszka
2011-03-11 9:06 ` Gilles Chanteperdrix
2011-03-11 9:59 ` Johann Obermayr
2011-03-11 9:52 ` Johann Obermayr
2011-03-11 10:59 ` Johann Obermayr
2 siblings, 2 replies; 9+ messages in thread
From: Jan Kiszka @ 2011-03-11 8:58 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai
[-- Attachment #1: Type: text/plain, Size: 468 bytes --]
On 2011-03-11 09:51, Gilles Chanteperdrix wrote:
> Johann Obermayr wrote:
>> void task_waiter_do(void *data)
>> {
>> rt_printf("task_waiter_do started\n");
>> while(task_waiter_flag == 0)
>> ; // rt_task_sleep( DELAYMS(1) );
>> rt_printf("task_waiter_do finished\n");
>> }
>
> What happens if you uncomment the rt_task_sleep here ?
>
Given how often users make this mistake, should we enable the watchdog
by default?
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 8:58 ` Jan Kiszka
@ 2011-03-11 9:06 ` Gilles Chanteperdrix
2011-03-11 9:59 ` Johann Obermayr
1 sibling, 0 replies; 9+ messages in thread
From: Gilles Chanteperdrix @ 2011-03-11 9:06 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai
Jan Kiszka wrote:
> On 2011-03-11 09:51, Gilles Chanteperdrix wrote:
>> Johann Obermayr wrote:
>>> void task_waiter_do(void *data)
>>> {
>>> rt_printf("task_waiter_do started\n");
>>> while(task_waiter_flag == 0)
>>> ; // rt_task_sleep( DELAYMS(1) );
>>> rt_printf("task_waiter_do finished\n");
>>> }
>> What happens if you uncomment the rt_task_sleep here ?
>>
>
> Given how often users make this mistake, should we enable the watchdog
> by default?
>From my point of view, however strange this example is, it should work
with root thread priority coupling enabled.
--
Gilles.
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 8:58 ` Jan Kiszka
2011-03-11 9:06 ` Gilles Chanteperdrix
@ 2011-03-11 9:59 ` Johann Obermayr
1 sibling, 0 replies; 9+ messages in thread
From: Johann Obermayr @ 2011-03-11 9:59 UTC (permalink / raw)
To: jan.kiszka; +Cc: xenomai
Am 11.03.2011 09:58, schrieb Jan Kiszka:
> On 2011-03-11 09:51, Gilles Chanteperdrix wrote:
>> Johann Obermayr wrote:
>>> void task_waiter_do(void *data)
>>> {
>>> rt_printf("task_waiter_do started\n");
>>> while(task_waiter_flag == 0)
>>> ; // rt_task_sleep( DELAYMS(1) );
>>> rt_printf("task_waiter_do finished\n");
>>> }
>> What happens if you uncomment the rt_task_sleep here ?
>>
> Given how often users make this mistake, should we enable the watchdog
> by default?
>
> Jan
>
We have a watchdog, and your watchdod-task suspend the user-task
(task_waiter_do).
the sample show this problem.
The task_worker_do is a watchdog. he control some other 'user-task'.
In your project, the watchdog startup the watchdog-task.
the task_worker_do suspend the user-task.
the task_worker_do will delete the user-task.
if the user-task have only while(1); than the machine will hang.
if the user-task have in the while a sleep or other function,
the task_worker_do can delete the task_waiter, and all work correct.
Jimmy
--
Mit freundlichen Grüßen, best regards
Johann Obermayr
Software Entwicklung
________________________________________________
SIGMATEK GmbH& Co KG
Sigmatekstraße 1
5112 Lamprechtshausen
Österreich / Austria
Tel. : +43 / 6274/ 43 21-0 (Durchwahl leider nicht möglich)
Fax : +43 / 6274/ 43 21-18 (bzw 300 im Werk 2 )
E-Mail: johann.obermayr@domain.hid
http://www.sigmatek-automation.com
****************************Please note:********************************
This email and all attachments are confidential and intended solely for
the person or entity to whom it is addressed. If you are not the named
addressee you must not make this email and all attachments accessible
to any other person. If you have received this email in error please
delete it together with all attachments.
************************************************************************
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 8:51 ` Gilles Chanteperdrix
2011-03-11 8:58 ` Jan Kiszka
@ 2011-03-11 9:52 ` Johann Obermayr
2011-03-11 9:56 ` Gilles Chanteperdrix
2011-03-11 13:13 ` Gilles Chanteperdrix
2011-03-11 10:59 ` Johann Obermayr
2 siblings, 2 replies; 9+ messages in thread
From: Johann Obermayr @ 2011-03-11 9:52 UTC (permalink / raw)
To: gilles.chanteperdrix; +Cc: xenomai
Am 11.03.2011 09:51, schrieb Gilles Chanteperdrix:
> Johann Obermayr wrote:
>> void task_waiter_do(void *data)
>> {
>> rt_printf("task_waiter_do started\n");
>> while(task_waiter_flag == 0)
>> ; // rt_task_sleep( DELAYMS(1) );
>> rt_printf("task_waiter_do finished\n");
>> }
> What happens if you uncomment the rt_task_sleep here ?
we have some shared code from another RT OS.
And in this code there are some while(hw_state) ; loops.
> Could you please give us some more information:
> http://www.xenomai.org/index.php/Request_for_information
>
> Do you have priority coupling enabled?
Yes.
We use xenomai 2.5.5.2 and linux kernel 2.6.32.15. gcc 4.3.3
Here you have some more details.
a kernel module have a watchdog checker for some 'user-tasks'
if a 'user-task' have a while loop, than the kernel module will suspend
the user-task and call also the mayday function.
But on some other errorhandling, we have a high priortity watchdog task
control the 'user'-tasks.
On error the watchdog task suspend all user-tasks. (this work correct)
Than the watchdog-task switch off the user-task watchdog.
Make errorhandling and some other function (dump user-task stack)
Than the watchdog task will delete some user-task.
But if a user-task is in a while loop, the system hangs.
in user mode we have no mayday function.
it's look like, that when watchdog-task call rt_task_delete(user_task) ,
the user_task continue running.
Is this so ?
Thanks
Jimmy
--
Mit freundlichen Grüßen, best regards
Johann Obermayr
Software Entwicklung
________________________________________________
SIGMATEK GmbH& Co KG
Sigmatekstraße 1
5112 Lamprechtshausen
Österreich / Austria
Tel. : +43 / 6274/ 43 21-0 (Durchwahl leider nicht möglich)
Fax : +43 / 6274/ 43 21-18 (bzw 300 im Werk 2 )
E-Mail: johann.obermayr@domain.hid
http://www.sigmatek-automation.com
****************************Please note:********************************
This email and all attachments are confidential and intended solely for
the person or entity to whom it is addressed. If you are not the named
addressee you must not make this email and all attachments accessible
to any other person. If you have received this email in error please
delete it together with all attachments.
************************************************************************
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 9:52 ` Johann Obermayr
@ 2011-03-11 9:56 ` Gilles Chanteperdrix
2011-03-11 13:13 ` Gilles Chanteperdrix
1 sibling, 0 replies; 9+ messages in thread
From: Gilles Chanteperdrix @ 2011-03-11 9:56 UTC (permalink / raw)
To: johann.obermayr; +Cc: xenomai
Johann Obermayr wrote:
> Am 11.03.2011 09:51, schrieb Gilles Chanteperdrix:
>> Johann Obermayr wrote:
>>> void task_waiter_do(void *data)
>>> {
>>> rt_printf("task_waiter_do started\n");
>>> while(task_waiter_flag == 0)
>>> ; // rt_task_sleep( DELAYMS(1) );
>>> rt_printf("task_waiter_do finished\n");
>>> }
>> What happens if you uncomment the rt_task_sleep here ?
> we have some shared code from another RT OS.
> And in this code there are some while(hw_state) ; loops.
I just ask you to uncomment this line and run the test to see if it
changes anything. We are in the process of trying and understanding the
issue here... not fixing anything yet.
But from a general point of vieuw, code with unbounded busy waits with
Xenomai will not fly for other reasons.
--
Gilles.
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 9:52 ` Johann Obermayr
2011-03-11 9:56 ` Gilles Chanteperdrix
@ 2011-03-11 13:13 ` Gilles Chanteperdrix
1 sibling, 0 replies; 9+ messages in thread
From: Gilles Chanteperdrix @ 2011-03-11 13:13 UTC (permalink / raw)
To: johann.obermayr; +Cc: xenomai
Johann Obermayr wrote:
> We use xenomai 2.5.5.2 and linux kernel 2.6.32.15. gcc 4.3.3
>
> Here you have some more details.
> a kernel module have a watchdog checker for some 'user-tasks'
> if a 'user-task' have a while loop, than the kernel module will suspend
> the user-task and call also the mayday function.
>
> But on some other errorhandling, we have a high priortity watchdog task
> control the 'user'-tasks.
> On error the watchdog task suspend all user-tasks. (this work correct)
> Than the watchdog-task switch off the user-task watchdog.
> Make errorhandling and some other function (dump user-task stack)
> Than the watchdog task will delete some user-task.
> But if a user-task is in a while loop, the system hangs.
> in user mode we have no mayday function.
>From my point of view, you should be using the watchdog provided by
Xenomai. Did you notice that in your application, you can register a
signal handler to handle the watchdog signal? This would allow you to
use the watchdog provided by Xenomai to handle tasks blocked in infinite
loops. Then use your watchdog to handle other cases.
See the example at examples/native/sigdebug.c
> it's look like, that when watchdog-task call rt_task_delete(user_task) ,
> the user_task continue running.
> Is this so ?
Yes, this is probably the reason. The thing is that the watchdog task
calling rt_task_delete calls pthread_cancel, which causes a switch to
secondary mode. What I do not understand, however, is that since you
have priority coupling enabled, it should work. So, I have to reproduce
this case to understand. But actually, now that I think about it,
Wolfgang signalled the same issue with pthread_cancel and the posix skin
a long time ago, I looked at it, and I seem to remember that after
investigation, it could not work.
--
Gilles.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Xenomai-help] rt_task_delete trouble
2011-03-11 8:51 ` Gilles Chanteperdrix
2011-03-11 8:58 ` Jan Kiszka
2011-03-11 9:52 ` Johann Obermayr
@ 2011-03-11 10:59 ` Johann Obermayr
2 siblings, 0 replies; 9+ messages in thread
From: Johann Obermayr @ 2011-03-11 10:59 UTC (permalink / raw)
To: gilles.chanteperdrix; +Cc: xenomai
Am 11.03.2011 09:51, schrieb Gilles Chanteperdrix:
> Johann Obermayr wrote:
>> void task_waiter_do(void *data)
>> {
>> rt_printf("task_waiter_do started\n");
>> while(task_waiter_flag == 0)
>> ; // rt_task_sleep( DELAYMS(1) );
>> rt_printf("task_waiter_do finished\n");
>> }
> What happens if you uncomment the rt_task_sleep here ?
it work correct, if rt_task_sleep is uncommented.
> Could you please give us some more information:
> http://www.xenomai.org/index.php/Request_for_information
>
> Do you have priority coupling enabled?
Yes.
Jimmy
--
Mit freundlichen Grüßen, best regards
Johann Obermayr
Software Entwicklung
________________________________________________
SIGMATEK GmbH& Co KG
Sigmatekstraße 1
5112 Lamprechtshausen
Österreich / Austria
Tel. : +43 / 6274/ 43 21-0 (Durchwahl leider nicht möglich)
Fax : +43 / 6274/ 43 21-18 (bzw 300 im Werk 2 )
E-Mail: johann.obermayr@domain.hid
http://www.sigmatek-automation.com
****************************Please note:********************************
This email and all attachments are confidential and intended solely for
the person or entity to whom it is addressed. If you are not the named
addressee you must not make this email and all attachments accessible
to any other person. If you have received this email in error please
delete it together with all attachments.
************************************************************************
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-03-11 13:13 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-11 8:28 [Xenomai-help] rt_task_delete trouble Johann Obermayr
2011-03-11 8:51 ` Gilles Chanteperdrix
2011-03-11 8:58 ` Jan Kiszka
2011-03-11 9:06 ` Gilles Chanteperdrix
2011-03-11 9:59 ` Johann Obermayr
2011-03-11 9:52 ` Johann Obermayr
2011-03-11 9:56 ` Gilles Chanteperdrix
2011-03-11 13:13 ` Gilles Chanteperdrix
2011-03-11 10:59 ` Johann Obermayr
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.