[Xenomai-git] Philippe Gerum : alchemy/task: fix rt_task_set_periodic()

2014-07-03 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: e2c2c64057789c1f383bc7c664b48e5cdfea227d
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=e2c2c64057789c1f383bc7c664b48e5cdfea227d

Author: Philippe Gerum r...@xenomai.org
Date:   Wed Jul  2 19:03:08 2014 +0200

alchemy/task: fix rt_task_set_periodic()

---

 lib/alchemy/task.c |   21 ++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/lib/alchemy/task.c b/lib/alchemy/task.c
index 8de9257..26e29cb 100644
--- a/lib/alchemy/task.c
+++ b/lib/alchemy/task.c
@@ -826,15 +826,30 @@ undo:
  */
 int rt_task_set_periodic(RT_TASK *task, RTIME idate, RTIME period)
 {
-   struct timespec its, pts;
+   struct timespec its, pts, now;
struct alchemy_task *tcb;
struct service svc;
int ret;
 
CANCEL_DEFER(svc);
 
-   clockobj_ticks_to_timespec(alchemy_clock, idate, its);
-   clockobj_ticks_to_timespec(alchemy_clock, period, pts);
+   if (period == TM_INFINITE) {
+   pts.tv_sec = 0;
+   pts.tv_nsec = 0;
+   its = pts;
+   } else {
+   clockobj_ticks_to_timespec(alchemy_clock, period, pts);
+   if (idate == TM_NOW) {
+   __RT(clock_gettime(CLOCK_COPPERPLATE, now));
+   timespec_add(its, now, pts);
+   } else
+   /*
+* idate is an absolute time specification
+* already, so we want a direct conversion to
+* timespec.
+*/
+   clockobj_ticks_to_timespec(alchemy_clock, idate, its);
+   }
 
tcb = get_alchemy_task_or_self(task, ret);
if (tcb == NULL)


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : alchemy/task: fix rt_task_set_periodic()

2014-07-02 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 64395153b9db0e3dc92eae70926b0a76ddf75dd0
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=64395153b9db0e3dc92eae70926b0a76ddf75dd0

Author: Philippe Gerum r...@xenomai.org
Date:   Wed Jul  2 19:03:08 2014 +0200

alchemy/task: fix rt_task_set_periodic()

---

 lib/alchemy/task.c |   13 +++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/lib/alchemy/task.c b/lib/alchemy/task.c
index 8de9257..f516e91 100644
--- a/lib/alchemy/task.c
+++ b/lib/alchemy/task.c
@@ -833,8 +833,17 @@ int rt_task_set_periodic(RT_TASK *task, RTIME idate, RTIME 
period)
 
CANCEL_DEFER(svc);
 
-   clockobj_ticks_to_timespec(alchemy_clock, idate, its);
-   clockobj_ticks_to_timespec(alchemy_clock, period, pts);
+   if (period == TM_INFINITE) {
+   pts.tv_sec = 0;
+   pts.tv_nsec = 0;
+   its = pts;
+   } else {
+   clockobj_ticks_to_timespec(alchemy_clock, period, pts);
+   if (idate == TM_NOW)
+   clock_gettime(CLOCK_REALTIME, its);
+   else
+   clockobj_ticks_to_timespec(alchemy_clock, idate, its);
+   }
 
tcb = get_alchemy_task_or_self(task, ret);
if (tcb == NULL)


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git