* When looking for free blocks, we traverse the mdp->heapinfo looking
* for a cluster of free blocks that would be large enough.
*
+ * The size of the cluster is only to be trusted in the first block of the cluster.
+ * If the cluster results of the fusion of several clusters, the previously first
+ * block of their cluster will have partial data. The only information kept consistent over
+ * all blocks of the clusters is their type (== -1).
+ *
* Note that there is no way to determine if the block is free or busy by exploring
* this structure only. It wasn't intended to be crawled for comparison and we should fix it (TODO).
*
* I retrieve the first block of my cluster.
*
* TODO:
- * - add an indication of the requested size in the busy.block structure
- * - add the same for each fragments
- * - make room to store the backtrace of where the fragment were malloced, too.
+ * - add an indication of the requested size in each fragment, similarly to busy_block.busy_size
+ * - make room to store the backtrace of where the blocks and fragment were malloced, too.
*/
typedef struct {
int type; /* 0: busy large block
} busy_frag;
struct {
size_t size; /* Size (in blocks) of a large cluster. */
- size_t busy_size;
+ size_t busy_size; /* Actually used space, in bytes */
} busy_block;
/* Heap information for a free block (that may be the first of a free cluster). */
struct {
size_t heaplimit;
/* Block information table.
- Allocated with malign/__mmalloc_free (not mmalloc/mfree). */
+ Allocated with malign/mfree (not mmalloc/mfree). */
/* Table indexed by block number giving per-block information. */
malloc_info *heapinfo;
#define MMALLOC_ANONYMOUS (1 << 1) /* Use anonymous mapping */
#define MMALLOC_INITIALIZED (1 << 2) /* Initialized mmalloc */
-/* Internal version of `mfree' used in `morecore'. */
-
-extern void __mmalloc_free(struct mdesc *mdp, void *ptr);
-
/* A default malloc descriptor for the single sbrk() managed region. */
extern struct mdesc *__mmalloc_default_mdp;