Changeset 8248


Ignore:
Timestamp:
Jan 23, 2008, 8:48:36 AM (12 years ago)
Author:
gb
Message:

Don't add non-weak hash-tables to GCweakvll (in more cases.)

Location:
trunk/source/lisp-kernel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/ppc-gc.c

    r7668 r8248  
    303303          ((hash_table_vector_header *) base)->cache_key = undefined;
    304304          ((hash_table_vector_header *) base)->cache_value = lisp_nil;
    305         }
    306         deref(ptr_to_lispobj(base),1) = GCweakvll;
    307         GCweakvll = n;
    308         return;
     305          deref(ptr_to_lispobj(base),1) = GCweakvll;
     306          GCweakvll = n;
     307          return;
     308        }
    309309      }
    310310
     
    563563          ((hash_table_vector_header *) base)->cache_key = undefined;
    564564          ((hash_table_vector_header *) base)->cache_value = lisp_nil;
    565         }
    566         deref(ptr_to_lispobj(base),1) = GCweakvll;
    567         GCweakvll = n;
    568         return;
     565          deref(ptr_to_lispobj(base),1) = GCweakvll;
     566          GCweakvll = n;
     567          return;
     568        }
    569569      }
    570570
     
    732732          ((hash_table_vector_header *) base)->cache_key = undefined;
    733733          ((hash_table_vector_header *) base)->cache_value = lisp_nil;
    734         }
    735 
    736         deref(ptr_to_lispobj(base),1) = GCweakvll;
    737         GCweakvll = this;
    738         goto Climb;
     734         
     735          deref(ptr_to_lispobj(base),1) = GCweakvll;
     736          GCweakvll = this;
     737          goto Climb;
     738        }
    739739      }
    740740
     
    990990          ((hash_table_vector_header *) start)->cache_key = undefined;
    991991          ((hash_table_vector_header *) start)->cache_value = lisp_nil;
    992         }
    993 
    994         start[1] = GCweakvll;
    995         GCweakvll = (LispObj) (((natural) start) + fulltag_misc);
    996       } else {
    997 
    998         if (subtag == subtag_pool) {
    999           start[1] = lisp_nil;
    1000         }
    1001 
    1002         if (subtag == subtag_weak) {
    1003           natural weak_type = (natural) start[2];
    1004           if (weak_type >> population_termination_bit)
    1005             element_count -= 2;
    1006           else
    1007             element_count -= 1;
    1008           start[1] = GCweakvll;
    1009           GCweakvll = (LispObj) (((natural) start) + fulltag_misc);   
    1010         }
    1011 
    1012         base = start + element_count + 1;
    1013         while(element_count--) {
    1014           mark_root(*--base);
    1015         }
    1016       }
     992       
     993          start[1] = GCweakvll;
     994          GCweakvll = (LispObj) (((natural) start) + fulltag_misc);
     995          element_count = 0;
     996        }
     997      }
     998      if (subtag == subtag_pool) {
     999        start[1] = lisp_nil;
     1000      }
     1001
     1002      if (subtag == subtag_weak) {
     1003        natural weak_type = (natural) start[2];
     1004        if (weak_type >> population_termination_bit)
     1005          element_count -= 2;
     1006        else
     1007          element_count -= 1;
     1008        start[1] = GCweakvll;
     1009        GCweakvll = (LispObj) (((natural) start) + fulltag_misc);   
     1010      }
     1011
     1012      base = start + element_count + 1;
     1013      while(element_count--) {
     1014        mark_root(*--base);
     1015      }   
    10171016      start += size;
    10181017    }
  • trunk/source/lisp-kernel/x86-gc.c

    r8244 r8248  
    998998          ((hash_table_vector_header *) start)->cache_key = undefined;
    999999          ((hash_table_vector_header *) start)->cache_value = lisp_nil;
    1000         }
    1001 
    1002         start[1] = GCweakvll;
    1003         GCweakvll = (LispObj) (((natural) start) + fulltag_misc);
    1004       } else {
    1005 
    1006         if (subtag == subtag_pool) {
    1007           start[1] = lisp_nil;
    1008         }
    1009 
    1010         if (subtag == subtag_weak) {
    1011           natural weak_type = (natural) start[2];
    1012           if (weak_type >> population_termination_bit)
    1013             element_count -= 2;
    1014           else
    1015             element_count -= 1;
    1016           start[1] = GCweakvll;
    1017           GCweakvll = (LispObj) (((natural) start) + fulltag_misc);   
    1018         }
    1019 
    1020         base = start + element_count + 1;
    1021         if (subtag == subtag_function) {
    1022           element_count -= (int)start[1];
     1000          start[1] = GCweakvll;
     1001          GCweakvll = (LispObj) (((natural) start) + fulltag_misc);
     1002          element_count = 0;
    10231003        }
    1024         while(element_count--) {
    1025           mark_root(*--base);
    1026         }
     1004      }
     1005      if (subtag == subtag_pool) {
     1006        start[1] = lisp_nil;
     1007      }
     1008
     1009      if (subtag == subtag_weak) {
     1010        natural weak_type = (natural) start[2];
     1011        if (weak_type >> population_termination_bit)
     1012          element_count -= 2;
     1013        else
     1014          element_count -= 1;
     1015        start[1] = GCweakvll;
     1016        GCweakvll = (LispObj) (((natural) start) + fulltag_misc);   
     1017      }
     1018
     1019      base = start + element_count + 1;
     1020      if (subtag == subtag_function) {
     1021        element_count -= (int)start[1];
     1022      }
     1023      while(element_count--) {
     1024        mark_root(*--base);
    10271025      }
    10281026      start += size;
Note: See TracChangeset for help on using the changeset viewer.