aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorDavid Jones2003-11-11 16:22:12 +0000
committerDavid Jones2003-11-11 16:22:12 +0000
commite3210cc1b46b9e1c736f20ad3293c508883bdf47 (patch)
tree69359a4abd80d29ad0c9a349708662a16de23e4f /mps/code
parentb2886c16ab5e6d96aa6c0f6a8fff4cab513889a2 (diff)
downloademacs-e3210cc1b46b9e1c736f20ad3293c508883bdf47.tar.gz
emacs-e3210cc1b46b9e1c736f20ad3293c508883bdf47.zip
Mps: adding (null) interface to remember protection state.
Copied from Perforce Change: 63867 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/mps.h2
-rw-r--r--mps/code/mpsi.c13
-rw-r--r--mps/code/mpsicv.c23
3 files changed, 31 insertions, 7 deletions
diff --git a/mps/code/mps.h b/mps/code/mps.h
index eb31abab1c1..53edb1a9fed 100644
--- a/mps/code/mps.h
+++ b/mps/code/mps.h
@@ -239,6 +239,8 @@ extern void mps_arena_clamp(mps_arena_t);
239extern void mps_arena_release(mps_arena_t); 239extern void mps_arena_release(mps_arena_t);
240extern void mps_arena_park(mps_arena_t); 240extern void mps_arena_park(mps_arena_t);
241extern void mps_arena_expose(mps_arena_t); 241extern void mps_arena_expose(mps_arena_t);
242extern void mps_arena_unsafe_expose_remember_protection(mps_arena_t);
243extern void mps_arena_unsafe_restore_protection(mps_arena_t);
242extern mps_res_t mps_arena_start_collect(mps_arena_t); 244extern mps_res_t mps_arena_start_collect(mps_arena_t);
243extern mps_res_t mps_arena_collect(mps_arena_t); 245extern mps_res_t mps_arena_collect(mps_arena_t);
244extern mps_bool_t mps_arena_step(mps_arena_t, double, double); 246extern mps_bool_t mps_arena_step(mps_arena_t, double, double);
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c
index 6c90be25181..c2ebe260712 100644
--- a/mps/code/mpsi.c
+++ b/mps/code/mpsi.c
@@ -348,6 +348,19 @@ void mps_arena_expose(mps_arena_t mps_arena)
348 ArenaLeave(arena); 348 ArenaLeave(arena);
349} 349}
350 350
351/* Null implementations of remember and restore */
352void mps_arena_unsafe_expose_remember_protection(mps_arena_t mps_arena)
353{
354 mps_arena_expose(mps_arena);
355}
356
357void mps_arena_unsafe_restore_protection(mps_arena_t mps_arena)
358{
359 Arena arena = (Arena)mps_arena;
360 ArenaEnter(arena);
361 ArenaLeave(arena);
362}
363
351 364
352mps_res_t mps_arena_start_collect(mps_space_t mps_space) 365mps_res_t mps_arena_start_collect(mps_space_t mps_space)
353{ 366{
diff --git a/mps/code/mpsicv.c b/mps/code/mpsicv.c
index e81763cdc0a..80bb31e4caf 100644
--- a/mps/code/mpsicv.c
+++ b/mps/code/mpsicv.c
@@ -366,16 +366,25 @@ static void *test(void *arg, size_t s)
366 "all roots check"); 366 "all roots check");
367 } 367 }
368 if(collections == 1) { 368 if(collections == 1) {
369 mps_arena_clamp(arena); 369 mps_arena_clamp(arena);
370 clamp_until = i + 10000; 370 clamp_until = i + 10000;
371 } 371 }
372 if(collections % 3 == 0) { 372 if(collections % 6 == 0) {
373 mps_arena_expose(arena); 373 mps_arena_expose(arena);
374 mps_arena_release(arena); 374 mps_arena_release(arena);
375 }
376 if(collections % 6 == 3) {
377 mps_arena_unsafe_expose_remember_protection(arena);
378 mps_arena_unsafe_restore_protection(arena);
379 mps_arena_release(arena);
380 }
381 if(collections % 6 == 4) {
382 mps_arena_unsafe_expose_remember_protection(arena);
383 mps_arena_release(arena);
375 } 384 }
376 if(collections % 3 == 2) { 385 if(collections % 3 == 2) {
377 mps_arena_park(arena); 386 mps_arena_park(arena);
378 mps_arena_release(arena); 387 mps_arena_release(arena);
379 } 388 }
380 } 389 }
381 390