source: bootcd/isolinux/syslinux-6.03/core/thread/timeout.c

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 1.0 KB
Line 
1/*
2 * timeout.c
3 *
4 */
5
6#include "thread.h"
7
8/*
9 * __thread_process_timeouts()
10 *
11 * Look for threads that have timed out.  This should be called
12 * under interrupt lock, before calling __schedule().
13 */
14void __thread_process_timeouts(void)
15{
16    struct thread *curr = current();
17    struct thread_list *tp;
18    struct thread *t;
19    mstime_t now = ms_timer();
20    struct thread_block *block;
21    mstime_t timeout;
22
23    /* The current thread is obviously running, so no need to check... */
24    for (tp = curr->list.next; tp != &curr->list; tp = tp->next) {
25        t = container_of(tp, struct thread, list);
26        if ((block = t->blocked) && (timeout = block->timeout)) {
27            if ((mstimediff_t)(timeout - now) <= 0) {
28                struct semaphore *sem = block->semaphore;
29                /* Remove us from the queue and increase the count */
30                block->list.next->prev = block->list.prev;
31                block->list.prev->next = block->list.next;
32                sem->count++;
33
34                t->blocked = NULL;
35                block->timed_out = true;
36
37                __schedule();   /* Normally sets just __need_schedule */
38            }
39        }
40    }
41}
Note: See TracBrowser for help on using the repository browser.