diff options
| author | David Jones | 2003-11-11 16:22:12 +0000 |
|---|---|---|
| committer | David Jones | 2003-11-11 16:22:12 +0000 |
| commit | e3210cc1b46b9e1c736f20ad3293c508883bdf47 (patch) | |
| tree | 69359a4abd80d29ad0c9a349708662a16de23e4f /mps/code | |
| parent | b2886c16ab5e6d96aa6c0f6a8fff4cab513889a2 (diff) | |
| download | emacs-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.h | 2 | ||||
| -rw-r--r-- | mps/code/mpsi.c | 13 | ||||
| -rw-r--r-- | mps/code/mpsicv.c | 23 |
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); | |||
| 239 | extern void mps_arena_release(mps_arena_t); | 239 | extern void mps_arena_release(mps_arena_t); |
| 240 | extern void mps_arena_park(mps_arena_t); | 240 | extern void mps_arena_park(mps_arena_t); |
| 241 | extern void mps_arena_expose(mps_arena_t); | 241 | extern void mps_arena_expose(mps_arena_t); |
| 242 | extern void mps_arena_unsafe_expose_remember_protection(mps_arena_t); | ||
| 243 | extern void mps_arena_unsafe_restore_protection(mps_arena_t); | ||
| 242 | extern mps_res_t mps_arena_start_collect(mps_arena_t); | 244 | extern mps_res_t mps_arena_start_collect(mps_arena_t); |
| 243 | extern mps_res_t mps_arena_collect(mps_arena_t); | 245 | extern mps_res_t mps_arena_collect(mps_arena_t); |
| 244 | extern mps_bool_t mps_arena_step(mps_arena_t, double, double); | 246 | extern 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 */ | ||
| 352 | void mps_arena_unsafe_expose_remember_protection(mps_arena_t mps_arena) | ||
| 353 | { | ||
| 354 | mps_arena_expose(mps_arena); | ||
| 355 | } | ||
| 356 | |||
| 357 | void 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 | ||
| 352 | mps_res_t mps_arena_start_collect(mps_space_t mps_space) | 365 | mps_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 | ||