Rev 2881 | Rev 2889 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2881 | Rev 2884 | ||
|---|---|---|---|
| Line 115... | Line 115... | ||
| 115 | * too many zero-sized nodes). |
115 | * too many zero-sized nodes). |
| 116 | */ |
116 | */ |
| 117 | return false; |
117 | return false; |
| 118 | } |
118 | } |
| 119 | 119 | ||
| 120 | /** If possible, merge two intervals of freed indices. */ |
120 | /** If possible, coalesce two intervals of freed indices. */ |
| 121 | static void try_merge_intervals(link_t *l, link_t *r, link_t *cur) |
121 | static void try_coalesce_intervals(link_t *l, link_t *r, link_t *cur) |
| 122 | { |
122 | { |
| 123 | freed_t *fl = list_get_instance(l, freed_t, link); |
123 | freed_t *fl = list_get_instance(l, freed_t, link); |
| 124 | freed_t *fr = list_get_instance(r, freed_t, link); |
124 | freed_t *fr = list_get_instance(r, freed_t, link); |
| 125 | 125 | ||
| 126 | if (fl->last + 1 == fr->first) { |
126 | if (fl->last + 1 == fr->first) { |
| Line 168... | Line 168... | ||
| 168 | lnk = lnk->next) { |
168 | lnk = lnk->next) { |
| 169 | freed_t *f = list_get_instance(lnk, freed_t, link); |
169 | freed_t *f = list_get_instance(lnk, freed_t, link); |
| 170 | if (f->first == index + 1) { |
170 | if (f->first == index + 1) { |
| 171 | f->first--; |
171 | f->first--; |
| 172 | if (lnk->prev != &u->freed_head) |
172 | if (lnk->prev != &u->freed_head) |
| 173 | try_merge_intervals(lnk->prev, lnk, |
173 | try_coalesce_intervals(lnk->prev, lnk, |
| 174 | lnk); |
174 | lnk); |
| 175 | return; |
175 | return; |
| 176 | } |
176 | } |
| 177 | if (f->last == index - 1) { |
177 | if (f->last == index - 1) { |
| 178 | f->last++; |
178 | f->last++; |
| 179 | if (lnk->next != &u->freed_head) |
179 | if (lnk->next != &u->freed_head) |
| 180 | try_merge_intervals(lnk, lnk->next, |
180 | try_coalesce_intervals(lnk, lnk->next, |
| 181 | lnk); |
181 | lnk); |
| 182 | return; |
182 | return; |
| 183 | } |
183 | } |
| 184 | if (index > f->first) { |
184 | if (index > f->first) { |
| 185 | n = malloc(sizeof(freed_t)); |
185 | n = malloc(sizeof(freed_t)); |