summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2007-03-21 20:03:32 +0000
committerpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2007-03-21 20:03:32 +0000
commit31b3a5482b6cd7d3dd5aa4e9789aa4cfdb2b95d6 (patch)
tree9db871d9fe9c12f9ff793291d089ef3256e690e5
parent0cd95f5c3859db4a0bd10f606c8c37c99328093e (diff)
timer_gettime was not returning the right value for it_interval
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@116 7fd9a85b-ad96-42d3-883c-3090e2eb8679
-rw-r--r--nuttx/sched/timer_gettime.c2
-rw-r--r--nuttx/sched/timer_internal.h1
-rw-r--r--nuttx/sched/timer_settime.c2
3 files changed, 4 insertions, 1 deletions
diff --git a/nuttx/sched/timer_gettime.c b/nuttx/sched/timer_gettime.c
index 91a5a60d0f..26499555c5 100644
--- a/nuttx/sched/timer_gettime.c
+++ b/nuttx/sched/timer_gettime.c
@@ -114,7 +114,7 @@ int timer_gettime(timer_t timerid, FAR struct itimerspec *value)
/* Convert that to a struct timespec and return it */
(void)clock_ticks2time(ticks, &value->it_value);
- (void)clock_ticks2time(timer->pt_delay, &value->it_interval);
+ (void)clock_ticks2time(timer->pt_last, &value->it_interval);
return OK;
}
diff --git a/nuttx/sched/timer_internal.h b/nuttx/sched/timer_internal.h
index 1c1e8ec540..604adbc8ef 100644
--- a/nuttx/sched/timer_internal.h
+++ b/nuttx/sched/timer_internal.h
@@ -65,6 +65,7 @@ struct posix_timer_s
ubyte pt_signo; /* Notification signal */
pid_t pt_owner; /* Creator of timer */
int pt_delay; /* If non-zero, used to reset repetitive timers */
+ int pt_last; /* Last value used to set watchdog */
WDOG_ID pt_wdog; /* The watchdog that provides the timing */
union sigval pt_value; /* Data passed with notification */
};
diff --git a/nuttx/sched/timer_settime.c b/nuttx/sched/timer_settime.c
index fda730f9bc..29796a5933 100644
--- a/nuttx/sched/timer_settime.c
+++ b/nuttx/sched/timer_settime.c
@@ -139,6 +139,7 @@ static void inline timer_restart(FAR struct posix_timer_s *timer, uint32 itimer)
if (timer->pt_delay)
{
+ timer->pt_last = timer->pt_delay;
(void)wd_start(timer->pt_wdog, timer->pt_delay, timer_timeout, 1, itimer);
}
}
@@ -353,6 +354,7 @@ int timer_settime(timer_t timerid, int flags, FAR const struct itimerspec *value
if (delay > 0)
{
+ timer->pt_last = delay;
ret = wd_start(timer->pt_wdog, timer->pt_delay, timer_timeout, 1, (uint32)timer);
}