Author: leo
Date: Wed Apr 20 02:31:20 2005
New Revision: 7891
Modified:
trunk/src/dod.c
trunk/src/inter_create.c
trunk/src/trace.c
Log:
fix -G output bug
* running with -G didn't close output handles, which dropped
output w/o newlines
* print String contents in trace
* invalidate collected PMCs
Modified: trunk/src/dod.c
==============================================================================
--- trunk/src/dod.c (original)
+++ trunk/src/dod.c Wed Apr 20 02:31:20 2005
@@ -823,6 +823,14 @@
ext_pool->add_free_object(interpreter, ext_pool,
((PMC *)b)->pmc_ext);
}
+#ifndef NDEBUG
+ /*
+ * invalidate the PMC
+ */
+ PMC_struct_val((PMC*)b) = (void*)0xdeadbeef;
+ PMC_pmc_val((PMC*)b) = (void*)0xdeadbeef;
+ ((PMC*)b)->pmc_ext = (void*)0xdeadbeef;
+#endif
}
/* else object is a buffer(like) */
else if (PObj_sysmem_TEST(b) && PObj_bufstart(b)) {
Modified: trunk/src/inter_create.c
==============================================================================
--- trunk/src/inter_create.c (original)
+++ trunk/src/inter_create.c Wed Apr 20 02:31:20 2005
@@ -317,7 +317,12 @@
*
* Be sure that an async collector hasn't live bits set now, so
* trigger a finish run
+ *
+ * Need to turn off DOD blocking, else things stay alive and IO
+ * handles aren't closed
*/
+ interpreter->arena_base->DOD_block_level =
+ interpreter->arena_base->GC_block_level = 0;
Parrot_do_dod_run(interpreter, DOD_finish_FLAG);
/*
@@ -336,7 +341,7 @@
* so terminate the event loop
*/
if (!interpreter->parent_interpreter) {
- PIO_internal_shutdown(interpreter);
+ PIO_internal_shutdown(interpreter);
Parrot_kill_event_loop();
}
@@ -381,9 +386,9 @@
if (interpreter->profile) {
mem_sys_free(interpreter->profile->data);
- interpreter->profile->data = NULL;
+ interpreter->profile->data = NULL;
mem_sys_free(interpreter->profile);
- interpreter->profile = NULL;
+ interpreter->profile = NULL;
}
/* deinit op_lib */
@@ -423,8 +428,8 @@
(interpreter->thread_data->state & THREAD_STATE_JOINED))) {
if (interpreter->thread_data ) {
mem_sys_free(interpreter->thread_data);
- interpreter->thread_data = NULL;
- }
+ interpreter->thread_data = NULL;
+ }
mem_sys_free(interpreter);
}
}
Modified: trunk/src/trace.c
==============================================================================
--- trunk/src/trace.c (original)
+++ trunk/src/trace.c Wed Apr 20 02:31:20 2005
@@ -70,7 +70,8 @@
STRING *name = trace_class_name(interpreter, pmc);
PIO_eprintf(interpreter, "Class=%Ss:PMC(%#p)", name, pmc);
}
- else if (pmc->vtable->base_type == enum_class_PerlString) {
+ else if (pmc->vtable->base_type == enum_class_PerlString ||
+ pmc->vtable->base_type == enum_class_String) {
STRING *s = VTABLE_get_string(interpreter, pmc);
if (!s)
PIO_eprintf(interpreter, "%S=PMC(%#p Str:(NULL))",