[BACK]Return to reclaim.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / gc

Diff for /OpenXM_contrib2/asir2000/gc/reclaim.c between version 1.8 and 1.9

version 1.8, 2002/07/24 09:44:21 version 1.9, 2003/06/24 05:11:34
Line 27  signed_word GC_mem_found = 0;
Line 27  signed_word GC_mem_found = 0;
         /* nonzero.                                                     */          /* nonzero.                                                     */
 #endif /* PARALLEL_MARK */  #endif /* PARALLEL_MARK */
   
 static void report_leak(p, sz)  /* We defer printing of leaked objects until we're done with the GC     */
 ptr_t p;  /* cycle, since the routine for printing objects needs to run outside   */
 word sz;  /* the collector, e.g. without the allocation lock.                     */
   #define MAX_LEAKED 40
   ptr_t GC_leaked[MAX_LEAKED];
   unsigned GC_n_leaked = 0;
   
   GC_bool GC_have_errors = FALSE;
   
   void GC_add_leaked(leaked)
   ptr_t leaked;
 {  {
     if (HDR(p) -> hb_obj_kind == PTRFREE) {      if (GC_n_leaked < MAX_LEAKED) {
         GC_err_printf0("Leaked atomic object at ");        GC_have_errors = TRUE;
     } else {        GC_leaked[GC_n_leaked++] = leaked;
         GC_err_printf0("Leaked composite object at ");        /* Make sure it's not reclaimed this cycle */
           GC_set_mark_bit(leaked);
     }      }
     GC_print_heap_obj(p);  
     GC_err_printf0("\n");  
 }  }
   
   static GC_bool printing_errors = FALSE;
   /* Print all objects on the list after printing any smashed objs.       */
   /* Clear both lists.                                                    */
   void GC_print_all_errors ()
   {
       unsigned i;
   
       LOCK();
       if (printing_errors) {
           UNLOCK();
           return;
       }
       printing_errors = TRUE;
       UNLOCK();
       if (GC_debugging_started) GC_print_all_smashed();
       for (i = 0; i < GC_n_leaked; ++i) {
           ptr_t p = GC_leaked[i];
           if (HDR(p) -> hb_obj_kind == PTRFREE) {
               GC_err_printf0("Leaked atomic object at ");
           } else {
               GC_err_printf0("Leaked composite object at ");
           }
           GC_print_heap_obj(p);
           GC_err_printf0("\n");
           GC_free(p);
           GC_leaked[i] = 0;
       }
       GC_n_leaked = 0;
       printing_errors = FALSE;
   }
   
   
 #   define FOUND_FREE(hblk, word_no) \  #   define FOUND_FREE(hblk, word_no) \
       { \        { \
          report_leak((ptr_t)hblk + WORDS_TO_BYTES(word_no), \           GC_add_leaked((ptr_t)hblk + WORDS_TO_BYTES(word_no)); \
                      HDR(hblk) -> hb_sz); \  
       }        }
   
 /*  /*
Line 866  void GC_print_block_list()
Line 904  void GC_print_block_list()
  * Clear *flp.   * Clear *flp.
  * This must be done before dropping a list of free gcj-style objects,   * This must be done before dropping a list of free gcj-style objects,
  * since may otherwise end up with dangling "descriptor" pointers.   * since may otherwise end up with dangling "descriptor" pointers.
  * It may help for other pointer-containg objects.   * It may help for other pointer-containing objects.
  */   */
 void GC_clear_fl_links(flp)  void GC_clear_fl_links(flp)
 ptr_t *flp;  ptr_t *flp;

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>