2021-07-03 05:07:57 +01:00
<!DOCTYPE HTML>
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html;charset=US-ASCII" >
< meta name = "generator" content = "ZealOS V0.05" >
< style type = "text/css" >
body {background-color:#000000;}
.cF0{color:#ffffff;background-color:#000000;}
.cF1{color:#3465a4;background-color:#000000;}
.cF2{color:#4e9a06;background-color:#000000;}
.cF3{color:#06989a;background-color:#000000;}
.cF4{color:#a24444;background-color:#000000;}
.cF5{color:#75507b;background-color:#000000;}
.cF6{color:#ce982f;background-color:#000000;}
.cF7{color:#bcc0b9;background-color:#000000;}
.cF8{color:#555753;background-color:#000000;}
.cF9{color:#729fcf;background-color:#000000;}
.cFA{color:#82bc49;background-color:#000000;}
.cFB{color:#34e2e2;background-color:#000000;}
.cFC{color:#ac3535;background-color:#000000;}
.cFD{color:#ad7fa8;background-color:#000000;}
.cFE{color:#fce94f;background-color:#000000;}
.cFF{color:#000000;background-color:#000000;}
< / style >
< / head >
< body >
< pre style = "font-family:courier;font-size:10pt" >
< a name = "l1" > < / a > < span class = cF9 > CHeapCtrl< / span > < span class = cF0 > *< / span > < span class = cF5 > HeapCtrlInit< / span > < span class = cF0 > (< / span > < span class = cF9 > CHeapCtrl< / span > < span class = cF0 > *hc=< / span > < span class = cF3 > NULL< / span > < span class = cF0 > , < / span > < span class = cF9 > CTask< / span > < span class = cF0 > *task=< / span > < span class = cF3 > NULL< / span > < span class = cF0 > , < / span > < span class = cF9 > CBlkPool< / span > < span class = cF0 > *bp)
2021-07-03 07:51:43 +01:00
< a name = "l2" > < / a > {< / span > < span class = cF2 > //See < / span > < a href = "https://tomawezome.github.io/ZealOS/System/Utils/HeapLog.html#l83" > < span class = cF4 > HeapLog< / span > < / a > < span class = cF2 > () for an example.< / span > < span class = cF0 >
< a name = "l3" > < / a > < / span > < span class = cF2 > //Duplicated for < / span > < a href = "https://tomawezome.github.io/ZealOS/Kernel/KStart64.html#l29" > < span class = cF4 > System Task< / span > < / a > < span class = cF2 > .< / span > < span class = cF0 >
2021-07-04 23:11:34 +01:00
< a name = "l4" > < / a > < / span > < span class = cF1 > if< / span > < span class = cF0 > (!hc)
< a name = "l5" > < / a > hc = < / span > < span class = cF5 > ZCAlloc< / span > < span class = cF0 > (< / span > < span class = cF1 > sizeof< / span > < span class = cF7 > (< / span > < span class = cF9 > CHeapCtrl< / span > < span class = cF7 > )< / span > < span class = cF0 > );
< a name = "l6" > < / a > hc-> hc_signature = < / span > < span class = cF3 > HEAP_CTRL_SIGNATURE_VAL< / span > < span class = cF0 > ;
< a name = "l7" > < / a > hc-> mem_task = task;
< a name = "l8" > < / a > hc-> bp = bp;
< a name = "l9" > < / a > < / span > < span class = cF5 > QueueInit< / span > < span class = cF0 > (& hc-> next_mem_blk);
< a name = "l10" > < / a > hc-> last_mergable = < / span > < span class = cF3 > NULL< / span > < span class = cF0 > ;
< a name = "l11" > < / a > hc-> next_um = hc-> last_um = (& hc-> next_um)(< / span > < span class = cF1 > U8< / span > < span class = cF0 > *) - < / span > < span class = cF1 > offset< / span > < span class = cF0 > (< / span > < span class = cF9 > CMemUsed< / span > < span class = cF0 > .next);
< a name = "l12" > < / a > < / span > < span class = cF1 > return< / span > < span class = cF0 > hc;
2021-07-03 05:07:57 +01:00
< a name = "l13" > < / a > }
< a name = "l14" > < / a >
< a name = "l15" > < / a > < / span > < span class = cF1 > U0< / span > < span class = cF0 > < / span > < span class = cF5 > HeapCtrlDel< / span > < span class = cF0 > (< / span > < span class = cF9 > CHeapCtrl< / span > < span class = cF0 > *hc)
< a name = "l16" > < / a > {< / span > < span class = cF2 > //Free all blks alloced to a HeapCtrl.< / span > < span class = cF0 >
2021-07-04 23:11:34 +01:00
< a name = "l17" > < / a > < / span > < span class = cF9 > CMemBlk< / span > < span class = cF0 > *m, *m1;
2021-07-03 05:07:57 +01:00
< a name = "l18" > < / a >
2021-07-04 23:11:34 +01:00
< a name = "l19" > < / a > < / span > < span class = cF1 > if< / span > < span class = cF0 > (hc)
< a name = "l20" > < / a > < / span > < span class = cF7 > {< / span > < span class = cF0 >
< a name = "l21" > < / a > < / span > < span class = cF1 > PUSHFD< / span > < span class = cF0 >
< a name = "l22" > < / a > < / span > < span class = cF1 > CLI< / span > < span class = cF0 >
< a name = "l23" > < / a > < / span > < span class = cF1 > while< / span > < span class = cF0 > (< / span > < span class = cF5 > LBts< / span > < span class = cF7 > (< / span > < span class = cF0 > & hc-> locked_flags, < / span > < span class = cF3 > HClf_LOCKED< / span > < span class = cF7 > )< / span > < span class = cF0 > )
< a name = "l24" > < / a > < / span > < span class = cF1 > PAUSE< / span > < span class = cF0 >
< a name = "l25" > < / a > m = hc-> next_mem_blk;
< a name = "l26" > < / a > < / span > < span class = cF1 > while< / span > < span class = cF0 > (m != & hc-> next_mem_blk)
< a name = "l27" > < / a > {
< a name = "l28" > < / a > m1 = m-> next;
< a name = "l29" > < / a > < / span > < span class = cFD > MemPagTaskFree< / span > < span class = cF0 > (m, hc);
< a name = "l30" > < / a > m = m1;
< a name = "l31" > < / a > }
< a name = "l32" > < / a > < / span > < span class = cF5 > LBtr< / span > < span class = cF0 > (& hc-> locked_flags, < / span > < span class = cF3 > HClf_LOCKED< / span > < span class = cF0 > );
< a name = "l33" > < / a > < / span > < span class = cF1 > POPFD< / span > < span class = cF0 >
2021-07-03 05:07:57 +01:00
< a name = "l34" > < / a >
2021-07-04 23:11:34 +01:00
< a name = "l35" > < / a > < / span > < span class = cF5 > Free< / span > < span class = cF0 > (hc);
< a name = "l36" > < / a > < / span > < span class = cF7 > }< / span > < span class = cF0 >
2021-07-03 05:07:57 +01:00
< a name = "l37" > < / a > }
< / span > < / pre > < / body >
< / html >