Hi,

I stumbled over a strange behaviour of rt_task_delete for a created, set
periodic, but non-started task. The process gets killed on invocation,
but only if rt_task_set_periodic was called with a non-zero start time.
Here is the demo code:

#include <stdio.h>
#include <sys/mman.h>
#include <native/task.h>

main()
{
        RT_TASK task;

        mlockall(MCL_CURRENT|MCL_FUTURE);

        printf("rt_task_create=%d\n",
                rt_task_create(&task, "task", 8192*4, 10, 0));

        printf("rt_task_set_periodic=%d\n",
                rt_task_set_periodic(&task, rt_timer_read()+1, 100000));

        printf("rt_task_delete=%d\n",
                rt_task_delete(&task));
}

Once you skip rt_task_set_periodic or call it like this
rt_task_set_periodic(&task, TM_NOW, 100000), everything is fine. Tested
over trunk, but I guess over versions should suffer as well.

I noticed that the difference seems to be related to the
xnpod_suspend_thread in xnpod_set_thread_periodic. That suspend is not
called on idate == XN_INFINITE. What is it for then, specifically if you
would call xnpod_suspend_thread(thread, xnpod_get_time()+period, period)
which should have the same effect like xnpod_suspend_thread(thread, 0,
period)?

Jan

Attachment: signature.asc
Description: OpenPGP digital signature

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

Reply via email to