From 51d512484b7f17224b9a24d33dfc0feffa32c480 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Sat, 1 Sep 2007 20:14:05 -0400 Subject: [PATCH] * Refixed implementation of guardians to handle dead tconcs properly. --- bin/ikarus | Bin 63732 -> 67828 bytes bin/ikarus-collect.c | 502 ++++++++++++++++++------------------------- 2 files changed, 211 insertions(+), 291 deletions(-) diff --git a/bin/ikarus b/bin/ikarus index ca38c48cb54816e5c9a74033e7caf13317c3dd37..c22a4675dd8de64de7ba5242fc6ab2359c9db185 100755 GIT binary patch delta 16662 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 ROo+C~2_@dQ{OiY>{68v%wx$38 delta 14281 zcma)D3tSb|)}I-UdO-AGf=^xw7z*YKQxp{+kQ$h#kme&RGc`3I;G@tZ4x>)fQE+?I zQt_FlQCUZnR1_3N&0D74^4`2REbAW9%*v9=Z*TCxdBn0%fsRtDmE zOzF)EWe4;3>Ec@MBG#dCsN<9*)!R$zNtawKw}3s>xV?OeWjD?ZnN#JpvW5*x& z`k-k@WTZI|Y}#Gwr9HyB8VQ~m0tCK3S?i?;81W+7Nbk7)Y+69KCg8wsKhv(EZaK-` z3kY#eCtFaSSx31$uy+t1rsL5-rsEYgj<kBFK{$#*N zv+JWGZ7#K9x9Rl!9X7N{crU0Jl3Ep>(Z+NWUgPF6x@z2PMZ?>^6;!n;e^yr;YQ+i9 zjwbzNxr|+XXoY;7&1f3wcU73qKh8EZT?%GsV2FH-B?Jys!gsUmz=&k~gRRfUQm_V* z3hW(+hnav`KxSmQuzu~Bps31>X~9dS zRsOR2-3P2+Py&L=3Towqw0=`9iyb@RneoR-@NO7f7~WUVVR~OlB7EML?c~U2sQ(79 zCNE>qup;jSY|eY2_X27YnKxZW!F78z4AGQU&}5)AX(f#Gz6K4{MSxlshHhc z-%G3r8bQR2;KEy01kJ&#iQp1Mtq9&LVN;sTmrGbhvrs&%n~lJ8MDvz-zSKNRKFYk! z!|=4X7>?(d79sKxHowL9&gZek8JTuHF49|BOc7-?l0EN$sg?zdoq&a~6I?SP2Z79R zUfpJevkSbMa5OZmaK-{7A>L}NNF)1k7>q$NaxlK~klBe+z26S)fqqc;mYS{sC2uR!HQ%`s zyocYxU=9Tquz=QKZE2H&A(gwhDBp}vx;Qu9VE)8UyJ{Q?C}1O6_aAB(p`17bz8Z*L zwM5Pcr+!Jg^AYW8T}pm_@AhYErK}sIU6}%2d6K;o0=V{$Iq(ec_j}mo)@|iOth#j& zo1I=>sHj%Q32f;^ zyv_4gTBXnse=A}igf<;=V3Vozv#InO?Z*jqlqz;X37gb8wW5JqrDO)W25|NFAX8eQ zh$W&%7O_TQA(2_an!~h4dGLOY4ILqfY%kcwhJ{5ooJfL6mksss0k$YCSsA{God|0u zA7IzRdMeSISiA5Tc|UtHyi5PikgV(tLoT%^!Ok2e5{%+-G{IIJ4kqXTto5htWM$!z z4eM_d{*w2zU&7nLcB?kYav^)R&6Kb|cVLK%?5Gr89eLQD^`xtGS|Uvw3z@e~jFWgL zQT&~~4Qcb{MG{6#z6*8Rz!A!^A9yw8{{24GtqmMnE#`LSJqweE8815p`8{<|XewATt-IfXrMRB~yH5H-&+kXxWEsYh-W} zh!x2S(lP~UG1R6W_DN*O$hpG(FmziH2a#>_jCHB(!A2dXJg@n0aSULDX1FW1vc6F< z<4V-#*paT_2yu=LBsMk)zrpV1HFx~HyG-O57^PD5WkK>c>D+KyC@cj znvvw-GV^JIG!uQ#_heMi8U2D45-mi6? z@;*EBaGo+XpN)^+5tWa-EzBB8m-QsOD7wm5->Y4LvED6MUG3wWVB6PAwGu~;AGTLj z^=|UaYHyc^VyiNzRZ5v7b1j%>Ih$chxLkKVYg9~a7JVEW?{p|-a)ZB9Dqtq5RYzUce{tlTUh9$+wd%Xbho_O^HPsKioA{8NepSmNDaf9 zi_O~d*=rNK96v?g#FBcAg4mnALYloS#FnC*EU_UQ+24A3IYQYhS{iq0w$nxoN+aE$-hM%5U}$aUNe{Dlc`{Dh~nnj>f~R z$>~5m_$(UKa#G;cv3*^giRo5H-__(vATv>aQdf?lZeK?`bL5v42?X{+0ORI6?R;RXo?^W%bJ)8B76g(3#BQWs#k|<) z%G+@biyydt(BBtXV;K*bnj#yDt-?xVIIxjwH~RYV`YP){n`s_sjJy^HLl;jw{A;O}69_x`DBImKR`ZbOtoaR_lG;AEm{-|wEQUM#ks88V?WCy zJnaUT`^bjp#^YbfvhMjLb(t)$U};Ze%FEd&sjUKnVZfT5>E6%gv0tA!BQIkm!z1N| z?Azfh@yr-8vf)DbU39Kt&Y{^0+4&I*m4z8B^~wLVpD#)ACmks_4OaqP0kW%bdQs^a zYIk%QZn|bS%wa9(v+*OJmsM6e(j(7jnWLsRrtV_1`w+T+95ospgVSEcvn*|~Jl``g zy_t;0(@*V^olF@W*D`*#mG0u4I_ds)F?(WkHY7hA{dGi5JpW51pO2X;FY+Wl-H^lXuRrys=^IhjByXS6GknuR#36@l)>~Qu_&0 zIGW+tyR5)orrQ`icpEPAwRPlqIJT|j-EriTuzfb9)Q0flQzt?EtiP8!dioBDCL!%tg<^7f26g>qwht(`L9TD{5Rwoja>o}tQ2Mo^yS-e3nz|MT>|#H2&0Azf=#z{VC}#{a0_)Sb9KAL2GOw?G zE=s~!`$#@`HOpDhh+qSP139-o!Ltt$w;sVY$i(E^$E2GMr`9VF8!h)Js~S158GIP= zZi*sPLq?3D{%WO7|J-=eZfGq4+{lb>!e(LNeytjdY*i zj`?JC6yG))WJKJ)q&gDdoT=j& zlmf73LN;5&G2GOz54Y)DMKAroL(?WZ;mFYVP-ofr>Vi?aLal;b?YE3YX2SHJD}TYw zpq!T*CIHKU3a|1EJQ_S_h%m@R**z)3j0SpXQY$%7<&!L{H*7j*so&dlE@`-F_T%}qXEZc4lCQMEh2i2=blS1v z2A_7@Ul>0|gG#dfh3*trneMs{X|7;q^Q4uP58I^NUNUh0l0cR@Ne$^iS%v ztL3tK(iUG#7Ba6`elp)M{fJ022CEuHDP!@{NchUo2jxvN3aK5>_qVK}`cLtwi&}j2oP9cDuzto#xtT>$=NErv6jDds6g>Zrds0AxNWuMvGK*C17%T8B zB(VG_jNW|APRu_sD`#M6VypS$7lOfH=uRyIorat5H15l&X=AC_+>O;@TQ|5Nz3>ux z*q*ZD?st)0r-h=)3Dm?=`_Je)hew0x+;Xr_;_Hg2Rk z^NjknBi>DJ79BNQWU=&$zw0Af=kdSKEw~m*`$QoR*tQn?M7&0_S@p~1RR~Efwa0%t zZyEa{J1V7+k7QU}%}G^rM$rIH!kH@}8^@m83j;=T90fQ&GP>}sNmz|s^0hrP%+M~g zaZ6h`+hFyoCuwhsFC?AJ19fwze}=*SOWS0IJ57Jd>6Fx@!pp;!inT zcM&i?JQ;;flp`Yh;t&A*iEnUk2)_|6EGG%lAIjL{%f<+faORhL%!8)ktG2rjp+AeLHg zS5MmGi#Njm{LO}ozBTKv^=N6Q9XWk59{m%euaRt%t8{G(o0Ze+xf;tQ|1Zm1gk`d6 z%(l}8?@z1KKhpd5M!5McBTg^mowaWKwP0rk@60@F9l_jf&4TZQ6Tlpc?%oH><=PHB zVHdNcf3B7;&|O7f81okBg>M7ULHh-gq~FBn18pyHN*2Fl6jNWhR)8nz8c*4cp@`DQ z7{GREAx`eICRe35kai?)FHam-;wP<()Z<-bH1jP(Ba_CxC)we3W&}S{d^{fgX60Cz zG2ArqrC;OTc9F8Fy^bbDQm!4oQ_Ti0YvRPu>I)UVyhkN2Dyf)$glEjgIRvfjlM=Gg zo8x(>uy?tLYc!#wzFEyt@6S*8EGRZi$W=8Gv6(vaKhdkAZo+A)*XG#oy4NB1Z+XmI zWfZP}1!JFwZia0NDO|(NpS-&DfXcy~MaeIxQyPnaW(KuQ(}e1$R&Ra?I)@rAVj6|? zeBhjE?UQh3>Sz8hQ;YW-nf~R;J;`BtasvG@v^y9gcK&#y@D5wIJk(jS9x++vhuixX zZ=k4!XQFMK-&x*$MCqv5^?e zIsV{8Xr1xIE=#?Iad?(~=U=V`0w5d|@?|#pwJ_&pw5g1VuWHmnQPGd^jGjfynMGzBeA9ML0OtR76s5?Nr=C6A@r4Dgm?FSO&}M-|cQM4>-0R&dR4*okXs zBtfqlE7G4dKT7w3HA5rec;4wy|D=b;2v8gF!G9L%|JJ!gTkb)+AwwPCM`1_ovtOK&v4Tu>Nma8 zH)y2Wb$3tV#t!{ccMSrneZ@@3)lM%?E7t~tOKz}_lB8?!9rkZmbF&s!e=M>YjG;D6 zSgLYqTx3ZpUL%9fLc>KtlwMIT{KvPLg2oPtXKl7<)Q;tJF{-3D?wTC~Hyx7Zn?i(t zfbNQ=rnzQ9Y5%&4Hic&GP1L?np=q&q*y@#S%@8k~!Elppbb-1({~s#X!5Sjba7WG` zf8doy>}<8#bVo3EwtM9>FIJw0LT&16LRH_QS#sbEzz?h)%DOW!uZ^3Jw~#;iCauTe zwM`NEv+L)zP$P3I>h7P?;WjDN&cyA0tmiX(p@&u-x ze|}qx#X+Z`q3)Svezc3@5`Tj%-mQ_`YVUSn^Y>2qkiPbriJvBX0^jHGXEv3rNnVoj zV?G<5SEkJ0%tBXBRveqzven&{OZlvL_2Y_>&-_@hawvsGv*Ge-wvfG`6mIfVFj-a> zJH)P5^*o=*#&Bk^$Eym!? zwg&j~0Je4GR%OH*HfYnE^7HJgO^+xi`ZGsHmFvhrBVEng`ca@ikSK2i4dWoNcN zuUzRz2@HDS5i^WweQLw#!k*n0t9;hSvufLNS&m`NccdzvTx{}=x0DsHdm6npLRPvP zY~s$pA{`y9FkkL%jTT|{#%0XPT@#kQtBvxL?%AvJ0{9+~*`RfB%ol^RKY32fE2VZ1RE6lyM7Ld{GZ2Vj-JT6si2RfUPg;qpWW%NAO=g=EUVI;eBD5?d+aQ`*_CRG^D zH~wuJDPEGvf)005p2%cJ4!2~_9B!jDHQ@%pFEYUGrEH)dEm_mzz;>-3LfrRS7?Xkf z%HVqC{r_wZvp+im)V3_OxRcU6gJmBHR-_2F`A86Z`AC3relF+iYRj$^M<}c2vie8j zlrfwsw`ciBnsKQ>Q>v;B^rDrsb6EaS`pcT)qaBoN-cUxhVZJ5NN{=~g!qL9U?b#%u z{3DzlIoe(+;4S=K$X?Q3d2TlAR>Io9+8D#lwAcIr%rAKVHW$xP%v-&^2%DGj;aD1mJ+H>s z^Olf$kFVLR-?8bT4XjT5feHfnHMrKt$H9{4)Ujp$^o>ip*^fP2FR?zY-05X3^jur# z#?z9t15^Oo2RaNY1Dyq31YHJQ1ziVKfuu9|du~u5C>Rt8iUq}i57Wcy7AObwI%o}O;~B{*?EokM?FH=v6@d5)6wq+c zD9~uoIM77UB+wMlbkHnN2512&3$z5316l!k9h3`N16mK-2-*VL;l$%@PyuK!XdkEu zbQn|uDg&JYodul(T?AbMT?SQvu7bRv>!6#UTc9e?9guVu835Tq{-6L*AgBc>7!(dt zBF}pIp1;tj0e$tyf1WlK^<>t$!q?O8$~TRjScu)g4Mo9pXohqM><|73+zUf}mPn^Q zm87Wx)4vj64e^)z__RuYe7{BDVBiA6urm!CSBc<3xBFl_K}ZmZM&P zUj!a2@Fm~{0$&DREpP>}N8qc#e;3#b{JT>$uA_ltmq%?wXt~01XE@#@a42eGx4^H1 zUnuZF;I??-p+H-8#rz}9ge6Sn0t-KhS`jjDJd9-6O&RBiS5c~>;mX506+$DrNYWmG zi`t{01RfBLcN&3nA~5&D!Pdty0Kp$U7;DgSj2fDSosk0SJsiiHkST5}N#8fX{8Ps~ ze1#e!I*!Mo7%f8(N*6dByZTQ8&+dtT&LQwOJtV0S3W4mj#T7DG;D185lfY?^Nf7vK zXGwZo;L1?!PU)htzYVHaL|u(b^Q$826_}TqLgsBa$QJlA()hZ-cOy_EB8yMuOVSL1 z-+BW(mB4Bd?ur7JZ;+&X!ZiOkm?XU?I$k~?NyP$(Y{3R2@D~S>I)Ml6LBR?<8oF)~ z#L*6tv|ZpRjPfIadjq%hGcz;=Uzz?c__;Ayao>r?hf&zpEZhy-n{Y5F!qA2iq*35&MQ1j<4*`35O^mH zl?i+UQC|@FL*Od{_XoZyuop)E5_k@D8)D<4pgVxyLJS}UnP?^W_24VIA?BZiUOg&F z-9^W6bPN!On)02Bk=J3*!2WnwF5;h@F`?*jKE#j<3tm9 zniC!KMdQoOSWY6++cX8D7_Vb>bQ06y1NqKE=KXkVL;}x@MIj4(9eA0r*%R_J1ivT- z`+>j-SY^4uP8$6$k4VzHqC@Y114H2DNZ02AkHuR|ZxPVk(WrKT6GvjX3Yl?`A0Pr< zi@oHQ;J*+1^~7rG2HZ<*Tw$%S{@0606R=bgsRLW@&GV9ULcount == ik_ptr_page_size)){ - ik_ptr_page* y = ik_mmap(sizeof(ik_ptr_page)); + ik_ptr_page* y = *cache; + if(y){ + *cache = y->next; + } else { + y = ik_mmap(sizeof(ik_ptr_page)); + } y->count = 0; y->next = dst; dst = y; @@ -599,65 +604,231 @@ move_guarded(ikp x, ik_ptr_page* dst){ } -static void -forward_guardians(gc_t* gc){ - ikpcb* pcb = gc->pcb; +static int +forward_guardians_initial(gc_t* gc, + ik_ptr_page** cache, + ik_ptr_page** dead_tc_dead_obj_list, + ik_ptr_page** live_tc_dead_obj_list, + ik_ptr_page** dead_tc_live_obj_list, + ik_ptr_page** live_tc_live_obj_list){ int gen; - ik_ptr_page* forward_list[generation_count]; - for(gen = gc->collect_gen; gen>=0; gen--){ - /* must move backwards from older to younger generations */ - ik_ptr_page* todo = pcb->guardians[gen]; - pcb->guardians[gen] = 0; - ik_ptr_page* forward = 0; - ik_ptr_page* dropped = 0; - while(todo){ + int seen_live_tc_dead_obj = 0; + ikpcb* pcb = gc->pcb; + /* move guardians[0..g] to dead/live lists */ + for(gen=0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src = pcb->guardians[gen]; + ik_ptr_page* dead_dead = 0; + ik_ptr_page* dead_live = 0; + ik_ptr_page* live_dead = 0; + ik_ptr_page* live_live = 0; + while(src){ int i; - int n = todo->count; + int n = src->count; for(i=0; iptr[i]; + ikp a = src->ptr[i]; + ikp tc = ref(a, off_car); ikp obj = ref(a, off_cdr); - if(is_live(obj, gc)){ - forward = move_guarded(a, forward); + if(is_live(tc, gc)){ + if(is_live(obj, gc)){ + live_live = move_guardian(a, live_live, cache); + } else { + live_dead = move_guardian(a, live_dead, cache); + } } else { - dropped = move_guarded(a, dropped); + if(is_live(obj, gc)){ + dead_live = move_guardian(a, dead_live, cache); + } else { + dead_dead = move_guardian(a, dead_dead, cache); + } } } - ik_ptr_page* next = todo->next; - ik_munmap(todo, sizeof(ik_ptr_page)); - todo = next; - } - forward_list[gen] = forward; - pcb->guardians_dropped[gen] = dropped; - } - for(gen=0; gen<=gc->collect_gen; gen++){ - ik_ptr_page* src = forward_list[gen]; - ik_ptr_page* dst = pcb->guardians[next_gen(gen)]; - while(src){ - int i; - int n = src->count; ik_ptr_page* next = src->next; - src->next = dst; - dst = src; - for(i=0; iptr[i] = add_object(gc, src->ptr[i], "prot"); - } + src->next = *cache; + *cache = src; src = next; } - pcb->guardians[next_gen(gen)] = dst; + if(live_dead) { + seen_live_tc_dead_obj = 1; + } + dead_tc_dead_obj_list[gen] = dead_dead; + live_tc_dead_obj_list[gen] = live_dead; + dead_tc_live_obj_list[gen] = dead_live; + live_tc_live_obj_list[gen] = live_live; + pcb->guardians[gen] = 0; } - for(gen = 0; gen<=gc->collect_gen; gen++){ - ik_ptr_page* src = pcb->guardians_dropped[gen]; + return seen_live_tc_dead_obj; +} + +static void +forward_guardians_revive_dead(gc_t* gc, + ik_ptr_page** live_tc_dead_obj_list){ + int gen; + for(gen=0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src = live_tc_dead_obj_list[gen]; while(src){ int i; int n = src->count; for(i=0; iptr[i] = add_object(gc, src->ptr[i], "prot"); + ikp a = src->ptr[i]; + ikp obj = ref(a, off_cdr); + add_object(gc, obj, "guardian1"); } src = src->next; } } } +static int +forward_guardians_process_tconcs(gc_t* gc, + ik_ptr_page** cache, + ik_ptr_page** dead_tc_dead_obj_list, + ik_ptr_page** live_tc_dead_obj_list, + ik_ptr_page** dead_tc_live_obj_list, + ik_ptr_page** live_tc_live_obj_list){ + int gen; + int some_were_revived = 0; + /* objects in dead_tc_live_obj_list whos tconcs have become + alive must move to live_tc_live_obj list */ + for(gen=0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src = dead_tc_live_obj_list[gen]; + ik_ptr_page* live = live_tc_live_obj_list[gen]; + ik_ptr_page* dead = 0; + while(src){ + int i; + int n = src->count; + for(i=0; iptr[i]; + ikp tc = ref(a, off_car); + if(is_live(tc, gc)){ + live = move_guardian(a, live, cache); + } else { + dead = move_guardian(a, dead, cache); + } + } + ik_ptr_page* next = src->next; + src->next = *cache; + *cache = src; + src = next; + } + live_tc_live_obj_list[gen] = live; + dead_tc_live_obj_list[gen] = dead; + } + /* objects in dead_tc_dead_obj_list whos tconcs have become + alive must move to live_tc_dead_obj list + obj must be resurrected */ + for(gen=0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src = dead_tc_dead_obj_list[gen]; + ik_ptr_page* dead = 0; + ik_ptr_page* live = live_tc_dead_obj_list[gen]; + while(src){ + int i; + int n = src->count; + for(i=0; iptr[i]; + ikp tc = ref(a, off_car); + if(is_live(tc, gc)){ + some_were_revived = 1; + add_object(gc, ref(a, off_cdr), "guardian2"); + live = move_guardian(a, live, cache); + } else { + dead = move_guardian(a, dead, cache); + } + } + ik_ptr_page* next = src->next; + src->next = *cache; + *cache = src; + src = next; + } + live_tc_dead_obj_list[gen] = live; + dead_tc_dead_obj_list[gen] = dead; + } + return some_were_revived; +} + + + + +static void +forward_guardians(gc_t* gc){ + ikpcb* pcb = gc->pcb; + ik_ptr_page* dead_tc_dead_obj_list[generation_count]; + ik_ptr_page* live_tc_dead_obj_list[generation_count]; + ik_ptr_page* dead_tc_live_obj_list[generation_count]; + ik_ptr_page* live_tc_live_obj_list[generation_count]; + ik_ptr_page* cache = 0; + int seen_live_tc_dead_obj = + forward_guardians_initial(gc, &cache, + dead_tc_dead_obj_list, live_tc_dead_obj_list, + dead_tc_live_obj_list, live_tc_live_obj_list); + if (seen_live_tc_dead_obj){ + /* objects in live_tc_dead_obj_list must be revived */ + forward_guardians_revive_dead(gc, live_tc_dead_obj_list); + int some_were_revived = 1; + while(some_were_revived){ + collect_loop(gc); + some_were_revived = + forward_guardians_process_tconcs(gc, &cache, + dead_tc_dead_obj_list, live_tc_dead_obj_list, + dead_tc_live_obj_list, live_tc_live_obj_list); + } + } + /* dead_tc_dead_obj_list and dead_tc_live_obj_list must go away */ + int gen; + for(gen=0; gen<=gc->collect_gen; gen++){ + ik_ptr_page* src,* dst; + src = dead_tc_dead_obj_list[gen]; + while(src){ + ik_ptr_page* next = src->next; + src->next = cache; + cache = src; + src = next; + } + src = dead_tc_live_obj_list[gen]; + while(src){ + ik_ptr_page* next = src->next; + src->next = cache; + cache = src; + src = next; + } + /* make all pairs in live_tc_dead_obj live */ + src = live_tc_dead_obj_list[gen]; + pcb->guardians_dropped[gen] = src; + while(src){ + int i; + int n = src->count; + for(i=0; iptr[i] = + add_object(gc, src->ptr[i], "guardian3"); + } + src = src->next; + } + /* make all pairs in live_tc_live_obj live and + add them to next gen */ + src = live_tc_live_obj_list[gen]; + dst = pcb->guardians[next_gen(gen)]; + while(src){ + int i; + int n = src->count; + for(i=0; iptr[i], "g4"), dst, + &cache); + } + ik_ptr_page* next = src->next; + src->next = cache; + cache = src; + src = next; + } + pcb->guardians[next_gen(gen)] = dst; + } + collect_loop(gc); + while(cache){ + ik_ptr_page* next = cache->next; + ik_munmap(cache, sizeof(ik_ptr_page)); + cache = next; + } + //exit(-1); +} + static void empty_dropped_guardians(gc_t* gc){ ikpcb* pcb = gc->pcb; @@ -691,257 +862,6 @@ empty_dropped_guardians(gc_t* gc){ } - - - - -#if 0 -static void -forward_guardians(gc_t* gc){ - ik_guardian_table* dropped_lists[generation_count]; - ik_guardian_table* forward_lists[generation_count]; - int collect_gen = gc->collect_gen; - ikpcb* pcb = gc->pcb; - /* split collected tc/obj pairs into ones to forward to next - generation (live objs) and ones to drop (dead objects) */ - int gen; - for(gen=0; gen<=collect_gen; gen++){ - ik_guardian_table* todo = pcb->guardians[gen]; - pcb->guardians[gen] = 0; - ik_guardian_table* forward_list = 0; - ik_guardian_table* dropped_list = 0; - while(todo){ - int n = todo->count; - int i; - for(i=0; ip[i].tc; - ikp obj = todo->p[i].obj; - if(is_live(obj, gc)){ - forward_list = move_guardian(tc, obj, forward_list); - } else { - dropped_list = move_guardian(tc, obj, forward_list); - } - } - ik_guardian_table* next = todo->next; - ik_munmap(todo, sizeof(ik_guardian_table)); - todo = next; - } - forward_lists[gen] = forward_list; - dropped_lists[gen] = dropped_list; - } - /* next, everything in the forward_lists is forwarded to - the guardians list of the next generation. - FIXME: if tconc is dead, why are we forwarding it? - */ - for(gen=0; gen<=collect_gen; gen++){ - ik_guardian_table* src = forward_lists[gen]; - ik_guardian_table* dst = pcb->guardians[next_gen(gen)]; - while(src){ - int n = src->count; - int i; - for(i=0; ip[i].tc, "guardian tc"); - ikp obj = add_object(gc, src->p[i].obj, "guardian obj"); - dst = move_guardian(tc, obj, dst); - } - ik_guardian_table* next = src->next; - ik_munmap(src, sizeof(ik_guardian_table)); - src = next; - } - } - /* next, everything in the dropped_lists is forwarded to the - next generation (e.g. marked live). - FIXME: if tconc is dead, why are we forwarding it? - */ - for(gen=0; gen<=collect_gen; gen++){ - ik_guardian_table* src = dropped_lists[gen]; - while(src){ - int n = src->count; - int i; - for(i=0; ip[i].tc = add_object(gc, src->p[i].tc, "guardian tc"); - src->p[i].obj = add_object(gc, src->p[i].obj, "guardian obj"); - } - src = src->next; - } - } - - -} -#endif - - - -#if 0 -static void -guardians_loop_old(gc_t* gc){ - ikpcb* pcb = gc->pcb; - int gen = gc->collect_gen; - ik_guardian_table* pending_hold[generation_count]; - ik_guardian_table* pending_final = 0; - ik_guardian_table* final = 0; - /* reset all pending_hold and pending_fina lists. */ - { - int i; - for(i=0; i<=gen; i++){ - pending_hold[i] = 0; - } - } - /* move all guardian tc/objects to either pending_hold */ - /* or pending_fina depending on whether the object is */ - /* live or dead respectively. */ - { - int i; - for(i=0; i<=gen; i++){ - ik_guardian_table* t = pcb->guardians[i]; - while(t){ - int j; - int count = t->count; - for(j=0; jp[j].tc; - ikp obj = t->p[j].obj; - if(is_live(obj, gc)){ - pending_hold[i] = - move_guardian(tc, obj, pending_hold[i]); - } else { - pending_final = - move_guardian(tc, obj, pending_final); - } - } - ik_guardian_table* next = t->next; - ik_munmap(t, sizeof(ik_guardian_table)); - t = next; - } - pcb->guardians[i] = 0; - } - } - int more; - do{ - /* for each tc/obj in pending_final, if tc is live, then */ - /* we add tc/obj to final list. */ - ik_guardian_table* t = pending_final; - more = 0; - while(t){ - int j; - int k=0; - int count = t->count; - for(j=0; j < count; j++){ - ikp tc = t->p[j].tc; - ikp obj = t->p[j].obj; - if(is_live(tc, gc)){ - final = move_guardian(tc, obj, final); - } - else { - t->p[k].tc = tc; - t->p[k].obj = obj; - k++; - } - } - if(k != count){ - t->count = k; - more = 1; - } - t = t->next; - } - if(more){ - ik_guardian_table* t = final; - while(t){ - int i; - int count = final->count; - for(i=0; ifinal_guardians = move_guardian( - add_object(gc, final->p[i].tc, "guardian_tc"), - add_object(gc, final->p[i].obj, "guardian_obj"), - gc->final_guardians); - } - t = t->next; - } - while(final){ - t = final->next; - ik_munmap(final, sizeof(ik_guardian_table)); - final = t; - } - } - collect_loop(gc); - } while (more); - /* */ - while(pending_final){ - ik_guardian_table* next = pending_final->next; - ik_munmap(pending_final, sizeof(ik_guardian_table)); - pending_final = next; - } - /* */ - { - int i; - for(i=0; i<=gen; i++){ - int ni = next_gen(i); - ik_guardian_table* t = pending_hold[i]; - while(t){ - int count = t->count; - int j; - for(j=0; jp[j].tc; - ikp obj = t->p[j].obj; - if(is_live(tc, gc)){ - pcb->guardians[ni] = move_guardian( - add_object(gc, tc, "guardian_tc2"), - add_object(gc, obj, "guardian_obj2"), - pcb->guardians[ni]); - } - } - ik_guardian_table* next = t->next; - ik_munmap(t, sizeof(ik_guardian_table)); - t = next; - } - } - } -} -#endif - - - -#if 0 - while(1){ - int i; - /* for every tc/obj in the queues, - - if tc is live and obj is live, move them to guard_move - - if tc is live and obj is dead, move them to guard_dead - - else keep tc, obj in guard_wait. - */ - for(i=0; i<=gen; i++){ - ik_guardian_table* t = guard_wait[i]; - while (t){ - int j = 0; - int k = 0; - int count = t->count; - while(j < count){ - ikp tc = t->p[j].tc; - ikp obj = t->p[j].obj; - if(is_live(tc, gc)){ - if(is_live(obj, gc)){ - guard_move[i] = move_guardian(tc, obj, guard_move[i]); - } - else { - guard_dead[i] = move_guardian(tc, obj, guard_dead[i]); - } - } - else { - t->p[k].tc = tc; - t->p[k].obj = obj; - k++; - } - j++; - } - t->count = k; - t = t->next; - } - } - /* now all things in guard_move are moved to next-gen's - * guardians */ - } -} -#endif - #define disp_frame_offset -13 #define disp_multivalue_rp -9