mirror of
https://github.com/apache/nuttx.git
synced 2026-06-04 06:42:32 +08:00
mm: idle check heap use mm_trysemaphore
Change-Id: I92e1df572fa6cd801b10e5b06e7b04d450b3e3fb Signed-off-by: ligd <liguiding1@xiaomi.com> (cherry picked from commit bc9a5d1ca9656f6effd3a419cc2488586dfb1489)
This commit is contained in:
@@ -66,15 +66,13 @@ void mm_checkcorruption(FAR struct mm_heap_s *heap)
|
||||
for (region = 0; region < heap_impl->mm_nregions; region++)
|
||||
#endif
|
||||
{
|
||||
irqstate_t flags = 0;
|
||||
|
||||
prev = NULL;
|
||||
|
||||
/* Visit each node in the region
|
||||
* Retake the semaphore for each region to reduce latencies
|
||||
*/
|
||||
|
||||
if (up_interrupt_context() || sched_idletask())
|
||||
if (up_interrupt_context())
|
||||
{
|
||||
if (heap_impl->mm_counts_held)
|
||||
{
|
||||
@@ -84,8 +82,13 @@ void mm_checkcorruption(FAR struct mm_heap_s *heap)
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
flags = enter_critical_section();
|
||||
}
|
||||
else if (sched_idletask())
|
||||
{
|
||||
if (mm_trysemaphore(heap))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -122,11 +125,7 @@ void mm_checkcorruption(FAR struct mm_heap_s *heap)
|
||||
|
||||
assert(node == heap_impl->mm_heapend[region]);
|
||||
|
||||
if (up_interrupt_context() || sched_idletask())
|
||||
{
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
else
|
||||
if (!up_interrupt_context())
|
||||
{
|
||||
mm_givesemaphore(heap);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user