290 |
scm_cond_signal (SCM_FUTURE_COND (next)); |
scm_cond_signal (SCM_FUTURE_COND (next)); |
291 |
scm_mutex_unlock (SCM_FUTURE_MUTEX (next)); |
scm_mutex_unlock (SCM_FUTURE_MUTEX (next)); |
292 |
next: |
next: |
293 |
|
SCM_SET_GC_MARK (next); |
294 |
nextloc = SCM_FUTURE_NEXTLOC (next); |
nextloc = SCM_FUTURE_NEXTLOC (next); |
295 |
next = *nextloc; |
next = *nextloc; |
296 |
} |
} |
310 |
{ |
{ |
311 |
while (!SCM_NULLP (futures)) |
while (!SCM_NULLP (futures)) |
312 |
{ |
{ |
|
scm_gc_mark (SCM_FUTURE_DATA (futures)); |
|
313 |
SCM_SET_GC_MARK (futures); |
SCM_SET_GC_MARK (futures); |
314 |
futures = SCM_FUTURE_NEXT (futures); |
futures = SCM_FUTURE_NEXT (futures); |
315 |
} |
} |
329 |
young = SCM_EOL; |
young = SCM_EOL; |
330 |
last_switch = now; |
last_switch = now; |
331 |
} |
} |
332 |
|
else |
333 |
|
mark_futures (young); |
334 |
|
|
335 |
next = futures; |
next = futures; |
336 |
nextloc = &futures; |
nextloc = &futures; |
354 |
{ |
{ |
355 |
SCM future; |
SCM future; |
356 |
UNLINK (next, future); |
UNLINK (next, future); |
357 |
|
SCM_SET_GC_MARK (future); |
358 |
LINK (young, future); |
LINK (young, future); |
359 |
} |
} |
360 |
} |
} |
361 |
*nextloc = SCM_EOL; |
*nextloc = SCM_EOL; |
362 |
exit: |
exit: |
363 |
cleanup_undead (); |
cleanup_undead (); |
|
mark_futures (young); |
|
364 |
mark_futures (old); |
mark_futures (old); |
|
mark_futures (undead); |
|
365 |
return 0; |
return 0; |
366 |
} |
} |
367 |
|
|