Added two more utility functions to the timer service:

* cancel_timer() cancels a timer, and returns true if the timer was running
* is_timer_active() determines if the timer is currently running or not.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19393 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2006-11-29 19:09:19 +00:00
parent 69b1f76d66
commit 2bd388f696
5 changed files with 30 additions and 0 deletions
+2
View File
@@ -93,6 +93,8 @@ struct net_stack_module_info {
// timer
void (*init_timer)(struct net_timer *timer, net_timer_func hook, void *data);
void (*set_timer)(struct net_timer *timer, bigtime_t delay);
bool (*cancel_timer)(struct net_timer *timer);
bool (*is_timer_active)(struct net_timer *timer);
};
#endif // NET_STACK_H
@@ -923,6 +923,8 @@ static net_stack_module_info sNetStackModule = {
init_timer,
set_timer,
cancel_timer,
is_timer_active,
};
static module_info sNetStarterModule = {
@@ -320,6 +320,28 @@ set_timer(net_timer *timer, bigtime_t delay)
}
bool
cancel_timer(struct net_timer *timer)
{
BenaphoreLocker locker(sTimerLock);
if (timer->due <= 0)
return false;
// this timer is scheduled, cancel it
list_remove_item(&sTimers, timer);
timer->due = 0;
return true;
}
bool
is_timer_active(net_timer *timer)
{
return timer->due > 0;
}
status_t
init_timers(void)
{
@@ -30,6 +30,8 @@ status_t clear_fifo(net_fifo *fifo);
// timer
void init_timer(net_timer *timer, net_timer_func hook, void *data);
void set_timer(net_timer *timer, bigtime_t delay);
bool cancel_timer(struct net_timer *timer);
bool is_timer_active(net_timer *timer);
status_t init_timers(void);
void uninit_timers(void);
+2
View File
@@ -186,6 +186,8 @@ static net_stack_module_info gNetStackModule = {
init_timer,
set_timer,
cancel_timer,
is_timer_active,
};