h->fl = fl;
HEADER_FREE (h) = fl;
malloc(size)	register size_t size;{	register int i, n;	register free_list_t fl;	register header_t h;	if ((int) size < 0)		/* sanity check */		return 0;	size += sizeof(union header);	/*	 * Find smallest power-of-two block size	 * big enough to hold requested size plus header.	 */	i = 0;	n = MIN_SIZE;	while (n < size) {		i += 1;		n <<= 1;	}	ASSERT(i < NBUCKETS);	fl = &malloc_free_list[i];	spin_lock(&fl->lock);	h = fl->head;	if (h == 0) {		/*		 * Free list is empty;		 * allocate more blocks.		 */		more_memory(n, fl);		h = fl->head;		if (h == 0) {			/*			 * Allocation failed.			 */			spin_unlock(&fl->lock);			return 0;		}	}	/*	 * Pop block from free list.	 */	fl->head = h->next;#ifdef	DEBUG	fl->in_use += 1;#endif	DEBUG	spin_unlock(&fl->lock);	/*	 * Store free list pointer in block header	 * so we can figure out where it goes	 * at free() time.	 */	h->fl = fl;	/*	 * Return pointer past the block header.	 */	return ((char *) h) + sizeof(union header);}