1 |
|
2002-12-21 Mikael Djurfeldt <djurfeldt@nada.kth.se> |
2 |
|
|
3 |
|
This change makes it possible for one thread to do lazy sweeping |
4 |
|
while other threads are running. Now only the mark phase need to |
5 |
|
have all threads asleep. We should look further into this issue. |
6 |
|
Presently, I've put the locking of scm_i_sweep_mutex at |
7 |
|
"conservative" places due to my current lack of knowledge about |
8 |
|
the garbage collector. Please feel free to restrict these regions |
9 |
|
further to allow for maximal parallelism! |
10 |
|
|
11 |
|
* gc.c, gc.h (scm_i_sweep_mutex): New mutex. |
12 |
|
|
13 |
|
* gc.c (scm_gc_for_newcell), gc-malloc.c (scm_realloc, |
14 |
|
scm_gc_register_collectable_memory): Substitute locking of |
15 |
|
scm_i_sweep_mutex for calls to scm_i_thread_put_to_sleep. |
16 |
|
(scm_igc): Lock sweep mutex here instead of in callers; Calls to |
17 |
|
scm_i_thread_put_to_sleep/scm_i_thread_wake_up used to demarkate |
18 |
|
the single-thread section (which now only contains the mark |
19 |
|
phase). |
20 |
|
(scm_gc): Don't lock sweeo mutex here since scm_igc locks it; |
21 |
|
Removed SCM_DEFER/ALLOW_INTS. Simply call scm_igc directly. |
22 |
|
|
23 |
|
* threads.c (gc_section_mutex): Removed. |
24 |
|
|
25 |
2002-12-19 Mikael Djurfeldt <mdj@kvast.blakulla.net> |
2002-12-19 Mikael Djurfeldt <mdj@kvast.blakulla.net> |
26 |
|
|
27 |
* threads.c (create_thread): Clear parent field in root state in |
* threads.c (create_thread): Clear parent field in root state in |