Description: TODO: Put a short summary on the line above and replace this paragraph with a longer explanation of this change. Complete the meta-information with other relevant fields (see below for details). To make it easier, the information below has been extracted from the changelog. Adjust it or drop it. . gcl (2.6.12-12) unstable; urgency=medium . * Version_2_6_13pre13 Author: Camm Maguire --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: , Bug: Bug-Debian: https://bugs.debian.org/ Bug-Ubuntu: https://launchpad.net/bugs/ Forwarded: Reviewed-By: Last-Update: --- gcl-2.6.12.orig/h/protoize.h +++ gcl-2.6.12/h/protoize.h @@ -1918,7 +1918,7 @@ void allocate_code_block_reserve(void); void * -alloc_contblock_no_gc(size_t); +alloc_contblock_no_gc(size_t,char *); void reset_contblock_freelist(void); --- gcl-2.6.12.orig/o/alloc.c +++ gcl-2.6.12/o/alloc.c @@ -1047,7 +1047,7 @@ alloc_contblock(size_t n) { } void * -alloc_contblock_no_gc(size_t n) { +alloc_contblock_no_gc(size_t n,char *limit) { struct typemanager *tm=tm_of(t_contiguous); void *p; @@ -1057,7 +1057,7 @@ alloc_contblock_no_gc(size_t n) { if ((p=alloc_from_freelist(tm,n))) return p; - if (tpage(tm,n)<(rb_start-heap_end)>>PAGEWIDTH && (p=alloc_after_adding_pages(tm,n))) + if (tpage(tm,n)<(limit-heap_end)>>PAGEWIDTH && (p=alloc_after_adding_pages(tm,n))) return p; return NULL; --- gcl-2.6.12.orig/o/gbc.c +++ gcl-2.6.12/o/gbc.c @@ -431,29 +431,21 @@ collecting(void *p) { static ufixnum ngc_thresh; static union {struct dummy d;ufixnum f;} rst={.f=-1}; -/* static object lcv=Cnil; */ +static void *static_promotion_limit; static inline void mark_leaf_data(object x,void **pp,ufixnum s,ufixnum r) { - void *p=*pp,*dp/* ,*dpe */; + void *p=*pp,*dp; if (!marking(p)||!collecting(p)) return; - /* if (lcv!=Cnil && !collecting(lcv->st.st_self) && */ - /* (dp=PCEI(lcv->st.st_self,r)) && dp+s<=(dpe=lcv->st.st_self+lcv->st.st_dim) */ - /* && x && x->d.st>=ngc_thresh) { */ - if (what_to_collect!=t_contiguous && x && x->d.st>=ngc_thresh && - (dp=alloc_contblock_no_gc(s))) { + (dp=alloc_contblock_no_gc(s,static_promotion_limit))) { - /* fprintf(stderr,"Promoting %p,%lu to %p\n",p,s,dp); */ - /* fflush(stderr); */ - *pp=memcpy(dp,p,s); - /* lcv->st.st_fillp=lcv->st.st_dim=(dpe-(void *)(lcv->st.st_self=dp+s)); */ x->d.st=0; return; @@ -1204,8 +1196,10 @@ GBC(enum type t) { if (gc_time >=0 && !gc_recursive++) {gc_start=runtime();} - if (COLLECT_RELBLOCK_P) + if (COLLECT_RELBLOCK_P) { + static_promotion_limit=rb_start