Subversion Repositories HelenOS

Rev

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));