forked from enlightenment/efl
dbc4669d68
When over-allocating (past "pool->max" items) a memory slice will be allocated to the new item as a linked list using Eina_Inlist. The original code was placing the Eina_Inlist structure (3 pointers) at the beginning of the allocated memory. However the item must have proper alignment based on "pool->item_size", otherwise a structure may end with unaligned members. Take for example MIPS 32 bits, it uses 4 bytes pointers with 8 bytes double. A structure containing a double could have it unaligned as 12 % 8 = 4 (12 is the size of Eina_Inlist, that contains 3 pointers), and MIPS doesn't allow unaligned access. Albin Tonnerre (Lutin) spotted this in his Debian MIPS test machine, it was breaking at eet_data_get_double() that was storing an unaligned double. This was being called from within edje test suite. The current code will place the list node after the requested "pool->item_size", of course guaranteeing the pointer inside the node is aligned (otherwise a "char" or "short" would break its alignment). |
||
---|---|---|
.. | ||
eina_one_big.c |