Subversion Repositories HelenOS

Rev

Rev 4606 | Rev 4642 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4606 Rev 4607
Line 278... Line 278...
278
            } else {
278
            } else {
279
                /* Block start has to be aligned */
279
                /* Block start has to be aligned */
280
                size_t excess = (size_t) (aligned - addr);
280
                size_t excess = (size_t) (aligned - addr);
281
               
281
               
282
                if (cur->size >= real_size + excess) {
282
                if (cur->size >= real_size + excess) {
283
                    /* The current block is large enought to fit
283
                    /* The current block is large enough to fit
284
                       data in including alignment */
284
                       data in including alignment */
285
                    if ((void *) cur > heap_start) {
285
                    if ((void *) cur > heap_start) {
286
                        /* There is a block before the current block.
286
                        /* There is a block before the current block.
287
                           This previous block can be enlarged to compensate
287
                           This previous block can be enlarged to compensate
288
                           for the alignment excess */
288
                           for the alignment excess */
Line 296... Line 296...
296
                       
296
                       
297
                        size_t reduced_size = cur->size - excess;
297
                        size_t reduced_size = cur->size - excess;
298
                        heap_block_head_t *next_head = ((void *) cur) + excess;
298
                        heap_block_head_t *next_head = ((void *) cur) + excess;
299
                       
299
                       
300
                        if ((!prev_head->free) && (excess >= STRUCT_OVERHEAD)) {
300
                        if ((!prev_head->free) && (excess >= STRUCT_OVERHEAD)) {
301
                            /* The previous block is not free and there is enought
301
                            /* The previous block is not free and there is enough
302
                               space to fill in a new free block between the previous
302
                               space to fill in a new free block between the previous
303
                               and current block */
303
                               and current block */
304
                            block_init(cur, excess, true);
304
                            block_init(cur, excess, true);
305
                        } else {
305
                        } else {
306
                            /* The previous block is free (thus there is no need to
306
                            /* The previous block is free (thus there is no need to
Line 314... Line 314...
314
                        result = aligned;
314
                        result = aligned;
315
                        cur = next_head;
315
                        cur = next_head;
316
                    } else {
316
                    } else {
317
                        /* The current block is the first block on the heap.
317
                        /* The current block is the first block on the heap.
318
                           We have to make sure that the alignment excess
318
                           We have to make sure that the alignment excess
319
                           is large enought to fit a new free block just
319
                           is large enough to fit a new free block just
320
                           before the current block */
320
                           before the current block */
321
                        while (excess < STRUCT_OVERHEAD) {
321
                        while (excess < STRUCT_OVERHEAD) {
322
                            aligned += falign;
322
                            aligned += falign;
323
                            excess += falign;
323
                            excess += falign;
324
                        }
324
                        }