mempool:fix memdump leak will hang on spinlock
root cuase is getpid use spinlock can read mempool nodes without needing spinlock protection. Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
parent
73f506b65f
commit
7c34ece5d6
@ -533,7 +533,6 @@ mempool_info_task(FAR struct mempool_s *pool,
|
|||||||
FAR const struct malltask *task)
|
FAR const struct malltask *task)
|
||||||
{
|
{
|
||||||
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
|
size_t blocksize = MEMPOOL_REALBLOCKSIZE(pool);
|
||||||
irqstate_t flags = spin_lock_irqsave(&pool->lock);
|
|
||||||
struct mallinfo_task info =
|
struct mallinfo_task info =
|
||||||
{
|
{
|
||||||
0, 0
|
0, 0
|
||||||
@ -541,8 +540,11 @@ mempool_info_task(FAR struct mempool_s *pool,
|
|||||||
|
|
||||||
if (task->pid == PID_MM_FREE)
|
if (task->pid == PID_MM_FREE)
|
||||||
{
|
{
|
||||||
|
irqstate_t flags = spin_lock_irqsave(&pool->lock);
|
||||||
size_t count = sq_count(&pool->queue) +
|
size_t count = sq_count(&pool->queue) +
|
||||||
sq_count(&pool->iqueue);
|
sq_count(&pool->iqueue);
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&pool->lock, flags);
|
||||||
info.aordblks += count;
|
info.aordblks += count;
|
||||||
info.uordblks += count * blocksize;
|
info.uordblks += count * blocksize;
|
||||||
}
|
}
|
||||||
@ -558,7 +560,6 @@ mempool_info_task(FAR struct mempool_s *pool,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
spin_unlock_irqrestore(&pool->lock, flags);
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user