1 |
/* |
/* |
2 |
* Cisco 7200 (Predator) simulation platform. |
* Cisco router simulation platform. |
3 |
* Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr) |
* Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr) |
4 |
* |
* |
5 |
* Periodic tasks centralization. Used for TX part of network devices. |
* Periodic tasks centralization. Used for TX part of network devices. |
25 |
static pthread_t ptask_thread; |
static pthread_t ptask_thread; |
26 |
static pthread_mutex_t ptask_mutex = PTHREAD_MUTEX_INITIALIZER; |
static pthread_mutex_t ptask_mutex = PTHREAD_MUTEX_INITIALIZER; |
27 |
static ptask_t *ptask_list = NULL; |
static ptask_t *ptask_list = NULL; |
28 |
static u_int ptask_sleep_time = 20; |
static u_int ptask_sleep_time = 10; |
29 |
static ptask_id_t ptask_current_id = 0; |
static ptask_id_t ptask_current_id = 0; |
30 |
|
|
31 |
#define PTASK_LOCK() pthread_mutex_lock(&ptask_mutex) |
#define PTASK_LOCK() pthread_mutex_lock(&ptask_mutex) |
34 |
/* Periodic task thread */ |
/* Periodic task thread */ |
35 |
static void *ptask_run(void *arg) |
static void *ptask_run(void *arg) |
36 |
{ |
{ |
37 |
|
pthread_mutex_t umutex = PTHREAD_MUTEX_INITIALIZER; |
38 |
|
pthread_cond_t ucond = PTHREAD_COND_INITIALIZER; |
39 |
|
|
40 |
ptask_t *task; |
ptask_t *task; |
41 |
|
|
42 |
for(;;) { |
for(;;) { |
44 |
for(task=ptask_list;task;task=task->next) |
for(task=ptask_list;task;task=task->next) |
45 |
task->cbk(task->object,task->arg); |
task->cbk(task->object,task->arg); |
46 |
PTASK_UNLOCK(); |
PTASK_UNLOCK(); |
47 |
usleep(ptask_sleep_time*1000); |
|
48 |
|
/* For testing! */ |
49 |
|
{ |
50 |
|
struct timespec t_spc; |
51 |
|
m_tmcnt_t expire; |
52 |
|
|
53 |
|
expire = m_gettime_usec() + 2000; |
54 |
|
|
55 |
|
pthread_mutex_lock(&umutex); |
56 |
|
t_spc.tv_sec = expire / 1000000; |
57 |
|
t_spc.tv_nsec = (expire % 1000000) * 1000; |
58 |
|
pthread_cond_timedwait(&ucond,&umutex,&t_spc); |
59 |
|
pthread_mutex_unlock(&umutex); |
60 |
|
} |
61 |
|
|
62 |
|
/* Old method... */ |
63 |
|
//usleep(ptask_sleep_time*1000); |
64 |
} |
} |
65 |
|
|
66 |
return NULL; |
return NULL; |