mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-21 06:39:17 +02:00
Another threading patch from Lorenzo, don't queue unpaused thread if
it's the current running thread, and fix to clear wait on correct unpaused thread.
This commit is contained in:
parent
05d01639eb
commit
af79b05f6d
1 changed files with 8 additions and 6 deletions
|
@ -419,12 +419,14 @@ sexp sexp_scheduler (sexp ctx, sexp self, sexp_sint_t n, sexp root_thread) {
|
||||||
sexp_cdr(ls1) = sexp_cdr(ls2);
|
sexp_cdr(ls1) = sexp_cdr(ls2);
|
||||||
tmp = sexp_cdr(ls2);
|
tmp = sexp_cdr(ls2);
|
||||||
sexp_cdr(ls2) = SEXP_NULL;
|
sexp_cdr(ls2) = SEXP_NULL;
|
||||||
if (! sexp_pairp(sexp_global(ctx, SEXP_G_THREADS_BACK))) {
|
if (sexp_car(ls2) != ctx) {
|
||||||
sexp_global(ctx, SEXP_G_THREADS_FRONT) = front = ls2;
|
if (! sexp_pairp(sexp_global(ctx, SEXP_G_THREADS_BACK))) {
|
||||||
} else {
|
sexp_global(ctx, SEXP_G_THREADS_FRONT) = front = ls2;
|
||||||
sexp_cdr(sexp_global(ctx, SEXP_G_THREADS_BACK)) = ls2;
|
} else {
|
||||||
|
sexp_cdr(sexp_global(ctx, SEXP_G_THREADS_BACK)) = ls2;
|
||||||
|
}
|
||||||
|
sexp_global(ctx, SEXP_G_THREADS_BACK) = ls2;
|
||||||
}
|
}
|
||||||
sexp_global(ctx, SEXP_G_THREADS_BACK) = ls2;
|
|
||||||
ls2 = tmp;
|
ls2 = tmp;
|
||||||
} else {
|
} else {
|
||||||
ls1 = ls2;
|
ls1 = ls2;
|
||||||
|
@ -472,7 +474,7 @@ sexp sexp_scheduler (sexp ctx, sexp self, sexp_sint_t n, sexp root_thread) {
|
||||||
ls2 = paused;
|
ls2 = paused;
|
||||||
while (sexp_pairp(ls2) && sexp_context_before(sexp_car(ls2), tval)) {
|
while (sexp_pairp(ls2) && sexp_context_before(sexp_car(ls2), tval)) {
|
||||||
sexp_context_timeoutp(sexp_car(ls2)) = 1;
|
sexp_context_timeoutp(sexp_car(ls2)) = 1;
|
||||||
sexp_context_waitp(ctx) = 0;
|
sexp_context_waitp(sexp_car(ls2)) = 0;
|
||||||
ls1 = ls2;
|
ls1 = ls2;
|
||||||
ls2 = sexp_cdr(ls2);
|
ls2 = sexp_cdr(ls2);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue