您的位置:首页 > 其它

内存管理API之mempool_free

2018-02-02 08:17 375 查看
void mempool_free(void *element, mempool_t *pool)用于将已经申请的缓存归还给缓存池
其源码分析如下:
void mempool_free(void *element, mempool_t *pool)
{
unsigned long flags;
#缓存为null则退出
if (unlikely(element == NULL))
return;

smp_rmb();

#min_nr 代表缓存池能提供的最小内存,而curr_nr代表缓存池当前剩下的内存,由于min_nr
#只有在紧急情况下使用,因此一般情况下curr_nr 都是大于min_nr的
if (unlikely(pool->curr_nr < pool->min_nr)) {
spin_lock_irqsave(&pool->lock, flags);
if (likely(pool->curr_nr < pool->min_nr)) {
#将用户释放的element 重新加到缓存池中
add_element(pool, element);
spin_unlock_irqrestore(&pool->lock, flags);
#唤醒等待队列,目前已经有人释放内存了,可以再次申请
wake_up(&pool->wait);
return;
}
spin_unlock_irqrestore(&pool->lock, flags);
}
#非紧急模式仅仅调用free函数指针释放内存.
pool->free(element, pool->pool_data);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: