git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Support to multi-threading and pthread interface (POSIX.1-2008) (#23)
[lunaix-os.git]
/
lunaix-os
/
kernel
/
ds
/
waitq.c
diff --git
a/lunaix-os/kernel/ds/waitq.c
b/lunaix-os/kernel/ds/waitq.c
index caed3bc6f498a11a705c990d060aab2637d5081f..c9fb88f3fede01cffd78d3900e33027f05d28457 100644
(file)
--- a/
lunaix-os/kernel/ds/waitq.c
+++ b/
lunaix-os/kernel/ds/waitq.c
@@
-1,21
+1,22
@@
#include <lunaix/ds/waitq.h>
#include <lunaix/process.h>
#include <lunaix/ds/waitq.h>
#include <lunaix/process.h>
+#include <lunaix/sched.h>
#include <lunaix/spike.h>
void
pwait(waitq_t* queue)
{
#include <lunaix/spike.h>
void
pwait(waitq_t* queue)
{
- assert(
__current
);
+ assert(
current_thread
);
// prevent race condition.
cpu_disable_interrupt();
// prevent race condition.
cpu_disable_interrupt();
- waitq_t* current_wq = &
__current
->waitqueue;
+ waitq_t* current_wq = &
current_thread
->waitqueue;
assert(llist_empty(¤t_wq->waiters));
llist_append(&queue->waiters, ¤t_wq->waiters);
assert(llist_empty(¤t_wq->waiters));
llist_append(&queue->waiters, ¤t_wq->waiters);
- block_current();
- sched_
yieldk
();
+ block_current
_thread
();
+ sched_
pass
();
cpu_enable_interrupt();
}
cpu_enable_interrupt();
}
@@
-28,10
+29,10
@@
pwake_one(waitq_t* queue)
}
waitq_t* wq = list_entry(queue->waiters.next, waitq_t, waiters);
}
waitq_t* wq = list_entry(queue->waiters.next, waitq_t, waiters);
- struct
proc_info* proc = container_of(wq, struct proc_info
, waitqueue);
+ struct
thread* thread = container_of(wq, struct thread
, waitqueue);
- assert(
proc
->state == PS_BLOCKED);
-
proc
->state = PS_READY;
+ assert(
thread
->state == PS_BLOCKED);
+
thread
->state = PS_READY;
llist_delete(&wq->waiters);
}
llist_delete(&wq->waiters);
}
@@
-42,14
+43,14
@@
pwake_all(waitq_t* queue)
return;
}
return;
}
- struct
proc_info* proc
;
+ struct
thread* thread
;
waitq_t *pos, *n;
llist_for_each(pos, n, &queue->waiters, waiters)
{
waitq_t *pos, *n;
llist_for_each(pos, n, &queue->waiters, waiters)
{
-
proc = container_of(pos, struct proc_info
, waitqueue);
+
thread = container_of(pos, struct thread
, waitqueue);
- assert(
proc
->state == PS_BLOCKED);
-
proc
->state = PS_READY;
+ assert(
thread
->state == PS_BLOCKED);
+
thread
->state = PS_READY;
llist_delete(&pos->waiters);
}
}
\ No newline at end of file
llist_delete(&pos->waiters);
}
}
\ No newline at end of file