On 19 July 2012 22:45, Jiří Zárevúcky <[email protected]> wrote: > On 30 August 2011 23:54, Jakub Jermar <[email protected]> wrote: >> On 08/17/2011 05:42 PM, Vojtech Horky wrote: >>> + /* >>> + * When growing the heap, we need to allocate at least this much >>> + * space. >>> + * Generally, to allocate x bytes aligned at y, we need at least >>> + * space x + y bytes. >>> + * Here we add some extra space (through ALIGN_UP(..., BASE_ALIGN)) >>> + * just to be on the safe side. >>> + * Notice that we need to take care of all structures as growing >>> + * the heap might bring a new AS area. >>> + */ >>> + size_t grow_size = ALIGN_UP(sizeof(heap_area_t), BASE_ALIGN) >>> + + ALIGN_UP(sizeof(heap_block_head_t), BASE_ALIGN) >>> + + falign >>> + + ALIGN_UP(size, BASE_ALIGN) >>> + + ALIGN_UP(sizeof(heap_block_foot_t), BASE_ALIGN); >> >> This extra space makes the whole thing look strange. Either it is needed >> and it shouldn't be called 'extra', or it is not needed and it shouldn't >> be there at all. >> > > Here is my attempt at a patch. > It's a little bit more complex, because I merged grow with subsequent > allocation for sanity checking and to eliminate the unnecessary > search. > I also only add a necessary amount when resizing an existing area. > Seems to work fine for me. >
Scrap that, it's completely wrong. As for the actual cause, it's the block header and footer that are messing up the alignment. I'm working on a patch that fixes it properly. -- Jirka Zr. _______________________________________________ HelenOS-devel mailing list [email protected] http://lists.modry.cz/cgi-bin/listinfo/helenos-devel
