Browse Source

runqueue: add a function that allows adding jobs to the front of the runqueue

Signed-off-by: John Crispin <blogic@openwrt.org>
lede-17.01
John Crispin 8 years ago
committed by Felix Fietkau
parent
commit
bc8167eb99
4 changed files with 23 additions and 2 deletions
  1. +15
    -2
      runqueue.c
  2. +1
    -0
      runqueue.h
  3. +6
    -0
      safe_list.c
  4. +1
    -0
      safe_list.h

+ 15
- 2
runqueue.c View File

@ -145,7 +145,7 @@ __runqueue_task_timeout(struct uloop_timeout *timeout)
runqueue_task_cancel(t, t->cancel_type);
}
void runqueue_task_add(struct runqueue *q, struct runqueue_task *t, bool running)
static void _runqueue_task_add(struct runqueue *q, struct runqueue_task *t, bool running, bool first)
{
struct safe_list *head;
@ -166,7 +166,10 @@ void runqueue_task_add(struct runqueue *q, struct runqueue_task *t, bool running
t->timeout.cb = __runqueue_task_timeout;
t->q = q;
safe_list_add(&t->list, head);
if (first)
safe_list_add_first(&t->list, head);
else
safe_list_add(&t->list, head);
t->cancelled = false;
t->queued = true;
t->running = running;
@ -175,6 +178,16 @@ void runqueue_task_add(struct runqueue *q, struct runqueue_task *t, bool running
runqueue_start_next(q);
}
void runqueue_task_add(struct runqueue *q, struct runqueue_task *t, bool running)
{
_runqueue_task_add(q, t, running, 0);
}
void runqueue_task_add_first(struct runqueue *q, struct runqueue_task *t, bool running)
{
_runqueue_task_add(q, t, running, 1);
}
void runqueue_task_kill(struct runqueue_task *t)
{
struct runqueue *q = t->q;


+ 1
- 0
runqueue.h View File

@ -100,6 +100,7 @@ void runqueue_stop(struct runqueue *q);
void runqueue_resume(struct runqueue *q);
void runqueue_task_add(struct runqueue *q, struct runqueue_task *t, bool running);
void runqueue_task_add_first(struct runqueue *q, struct runqueue_task *t, bool running);
void runqueue_task_complete(struct runqueue_task *t);
void runqueue_task_cancel(struct runqueue_task *t, int type);


+ 6
- 0
safe_list.c View File

@ -86,6 +86,12 @@ void safe_list_add(struct safe_list *list, struct safe_list *head)
list_add_tail(&list->list, &head->list);
}
void safe_list_add_first(struct safe_list *list, struct safe_list *head)
{
list->i = NULL;
list_add(&list->list, &head->list);
}
void safe_list_del(struct safe_list *list)
{
struct safe_list_iterator *i, *next_i, **tail;


+ 1
- 0
safe_list.h View File

@ -42,6 +42,7 @@ int safe_list_for_each(struct safe_list *list,
void *ctx);
void safe_list_add(struct safe_list *list, struct safe_list *head);
void safe_list_add_first(struct safe_list *list, struct safe_list *head);
void safe_list_del(struct safe_list *list);
#define INIT_SAFE_LIST(_head) \


Loading…
Cancel
Save