43 type = mdp -> heapinfo[block].busy.type;
48 mdp -> heapstats.chunks_used--;
49 mdp -> heapstats.bytes_used -=
50 mdp -> heapinfo[block].busy.info.size *
BLOCKSIZE;
51 mdp -> heapstats.bytes_free +=
52 mdp -> heapinfo[block].busy.info.size *
BLOCKSIZE;
62 i = mdp -> heapinfo[i].free.prev;
69 i = mdp -> heapinfo[i].free.next;
71 while ((i != 0) && (i < block));
72 i = mdp -> heapinfo[i].free.prev;
76 if (block == i + mdp -> heapinfo[i].
free.size)
79 mdp -> heapinfo[i].free.size +=
80 mdp -> heapinfo[block].busy.info.size;
86 mdp -> heapinfo[block].free.size =
87 mdp -> heapinfo[block].busy.info.size;
88 mdp -> heapinfo[block].free.next = mdp -> heapinfo[i].free.next;
89 mdp -> heapinfo[block].free.prev = i;
90 mdp -> heapinfo[i].free.next = block;
91 mdp -> heapinfo[mdp -> heapinfo[block].free.next].free.prev = block;
92 mdp -> heapstats.chunks_free++;
98 if (block + mdp -> heapinfo[block].
free.size ==
99 mdp -> heapinfo[block].free.next)
101 mdp -> heapinfo[block].free.size
102 += mdp -> heapinfo[mdp -> heapinfo[block].free.next].free.size;
103 mdp -> heapinfo[block].free.next
104 = mdp -> heapinfo[mdp -> heapinfo[block].free.next].free.next;
105 mdp -> heapinfo[mdp -> heapinfo[block].free.next].free.prev = block;
106 mdp -> heapstats.chunks_free--;
110 blocks = mdp -> heapinfo[block].free.size;
115 mdp -> heaplimit -= blocks;
117 mdp -> heapinfo[mdp -> heapinfo[block].free.prev].free.next
118 = mdp -> heapinfo[block].free.next;
119 mdp -> heapinfo[mdp -> heapinfo[block].free.next].free.prev
120 = mdp -> heapinfo[block].free.prev;
121 block = mdp -> heapinfo[block].free.prev;
122 mdp -> heapstats.chunks_free--;
123 mdp -> heapstats.bytes_free -=
bytes;
127 mdp -> heapindex = block;
132 mdp -> heapstats.chunks_used--;
133 mdp -> heapstats.bytes_used -= 1 <<
type;
134 mdp -> heapstats.chunks_free++;
135 mdp -> heapstats.bytes_free += 1 <<
type;
140 (mdp -> heapinfo[block].busy.info.frag.first <<
type));
142 if (mdp -> heapinfo[block].busy.info.frag.nfree ==
157 mdp -> heapinfo[block].busy.type = 0;
158 mdp -> heapinfo[block].busy.info.size = 1;
161 mdp -> heapstats.chunks_used++;
162 mdp -> heapstats.bytes_used +=
BLOCKSIZE;
164 mdp -> heapstats.bytes_free -=
BLOCKSIZE;
168 else if (mdp -> heapinfo[block].busy.info.frag.nfree != 0)
181 ++mdp -> heapinfo[block].busy.info.frag.nfree;
189 mdp -> heapinfo[block].busy.info.frag.nfree = 1;
190 mdp -> heapinfo[block].busy.info.frag.first =