Changeset 16473


Ignore:
Timestamp:
Jul 14, 2015, 8:49:48 AM (4 years ago)
Author:
gb
Message:

Merge more EGC changes from trunk.

Location:
branches/lscan/source/lisp-kernel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/lscan/source/lisp-kernel/constants.h

    r15842 r16473  
    116116  LispObj hash;                 /* backpointer to hash-table */
    117117  LispObj deleted_count;        /* number of deleted entries [not maintained if lock-free] */
    118   LispObj count;                /* number of valid entries [not maintained if lock-free] */
     118  LispObj count;                /* number of valid entries */
    119119  LispObj cache_idx;            /* index of last cached pair */
    120120  LispObj cache_key;            /* value of last cached key */
  • branches/lscan/source/lisp-kernel/gc-common.c

    r16119 r16473  
    12811281  natural nstatic = tenured_area->static_dnodes,
    12821282    i,
    1283     bits,
    12841283    bitnum,
    1285     nfree = 0,
    1286     nstatic_conses = area_dnode(static_cons_area->high, static_cons_area->low);
     1284    nfree = 0;
    12871285  cons *c = (cons *)tenured_area->low, *d;
    1288   bitvector bitsp = GCmarkbits;
    1289   LispObj head = lisp_global(STATIC_CONSES);
    1290 
    1291   for (i = 0; i < nstatic; i+= nbits_in_word, c+= nbits_in_word) {
    1292     bits = *bitsp++;
    1293     if (bits != ALL_ONES) {
    1294       for (bitnum = 0; bitnum < nbits_in_word; bitnum++) {
    1295         if (! (bits & (BIT0_MASK>>bitnum))) {
    1296           d = c + bitnum;
    1297           if (i < nstatic_conses) {               
    1298             d->car = unbound;
    1299             d->cdr = head;
    1300             head = ((LispObj)d)+fulltag_cons;
    1301             nfree++;
    1302           } else {
    1303             d->car = 0;
    1304             d->cdr = 0;
    1305           }
    1306         }
    1307       }
     1286  bitvector bits = GCmarkbits;
     1287  LispObj head = lisp_nil;
     1288
     1289  for (i = 0; i < nstatic; i++) {
     1290    if(!ref_bit(bits,i)) {
     1291      d=c+i;
     1292      d->cdr = head;
     1293      d->car = unbound;
     1294      nfree++;
     1295      head = ((LispObj) d)+fulltag_cons;
    13081296    }
    13091297  }
     
    17091697      }
    17101698    }
    1711 
    1712     mark_root(lisp_global(STATIC_CONSES));
     1699    /* those static conses that are reachable will be marked */
     1700    /*mark_root(lisp_global(STATIC_CONSES)); */
    17131701
    17141702    {
     
    18341822    GCfirstunmarked = calculate_relocation();
    18351823
     1824
     1825
    18361826    if (!GCephemeral_low) {
    18371827      reclaim_static_dnodes();
    18381828    }
     1829
    18391830
    18401831    forward_range((LispObj *) ptr_from_lispobj(GCarealow), (LispObj *) ptr_from_lispobj(GCfirstunmarked));
Note: See TracChangeset for help on using the changeset viewer.