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))",

Reply via email to