1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-09 13:10:57 -08:00

Mps br/timing z001989a: get collection begin/end messages.

FAILS: thereby demonstrating defect job001989.

Copied from Perforce
 Change: 166881
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Richard Kistruck 2008-12-05 22:14:56 +00:00
parent c1419eddb7
commit f70f64c16b

View file

@ -122,36 +122,56 @@ enum {
static void report(mps_arena_t arena, int expect)
{
int found = 0;
mps_message_type_t type;
/* Test any finalized objects */
while (mps_message_poll(arena)) {
while (mps_message_queue_type(&type, arena)) {
mps_message_t message;
mps_word_t *obj;
mps_word_t objind;
mps_addr_t objaddr;
cdie(mps_message_get(&message, arena, mps_message_type_finalization()),
cdie(mps_message_get(&message, arena, type),
"get");
found += 1;
mps_message_finalization_ref(&objaddr, arena, message);
obj = objaddr;
objind = DYLAN_INT_INT(DYLAN_VECTOR_SLOT(obj, 0));
printf(" Finalization for object %lu at %p\n", objind, objaddr);
cdie(myroot[objind] == NULL, "finalized live");
cdie(state[objind] == finalizableSTATE, "not finalizable");
state[objind] = finalizedSTATE;
mps_message_discard(arena, message);
switch(type) {
case mps_message_type_gc_start(): {
printf(" Begin Collection\n");
mps_message_discard(arena, message);
break;
}
case mps_message_type_gc(): {
printf(" End Collection\n");
mps_message_discard(arena, message);
break;
}
case mps_message_type_finalization(): {
mps_message_finalization_ref(&objaddr, arena, message);
obj = objaddr;
objind = DYLAN_INT_INT(DYLAN_VECTOR_SLOT(obj, 0));
printf(" Finalization for object %lu at %p\n", objind, objaddr);
cdie(myroot[objind] == NULL, "finalized live");
cdie(state[objind] == finalizableSTATE, "not finalizable");
state[objind] = finalizedSTATE;
mps_message_discard(arena, message);
break;
}
default: {
cdie(0, "message type");
break;
}
}
}
if(found < expect) {
printf("...expected %d finalizations, but got fewer: only %d!\n",
printf("...expected %d messages, but got fewer: only %d!\n",
expect, found);
cdie(FALSE, "wrong number of finalizations");
cdie(FALSE, "wrong number of messages");
} else if(found > expect) {
printf("...expected %d finalizations, but got more: %d!\n",
printf("...expected %d messages, but got more: %d!\n",
expect, found);
cdie(FALSE, "wrong number of finalizations");
cdie(FALSE, "wrong number of messages");
}
}
@ -314,10 +334,8 @@ static void *testscriptB(void *arg, size_t s)
/* stop stack scanning, to prevent unwanted object retention */
mps_root_destroy(root_stackreg);
#if 0
mps_message_type_enable(arena, mps_message_type_gc_start());
mps_message_type_enable(arena, mps_message_type_gc());
#endif
mps_message_type_enable(arena, mps_message_type_finalization());
testscriptC(arena, script);
@ -376,13 +394,14 @@ int main(int argc, char **argv)
randomize(argc, argv);
/* really basic scripts */
testscriptA(".C.CCC.");
testscriptA(".C.CCC");
testscriptA("Cbe.");
testscriptA(".Cbe.CbeCbeCbe.");
testscriptA(".Cbe.CbeCbeCbe");
/* simple finalization */
testscriptA("FFCff.");
testscriptA("FFCff.FFCff.");
testscriptA("FFCff.FC.F.Cff.FFCf.FF.Cfff.");
testscriptA("FFCbffe.");
testscriptA("FFCbffe.FFCbffe.");
testscriptA("FFCbffe.FCbe.F.Cbffe.FFCbfe.FF.Cbfffe.");
/* test failure: */
/*testscriptA("FC.");*/