iob_tryalloc: Fix throttled allocation

If threads are blocking for throttled allocation,
g_throttle_sem.semcount doesn't represent the number of
usable IOBs well.

Note: For non-throttled allocations, the g_iob_committed mechanism
is a rescue. But there is no equivalent for throttled allocations.
This commit is contained in:
YAMAMOTO Takashi 2021-07-19 19:45:30 +09:00 committed by Xiang Xiao
parent e96a870485
commit 5b1f2dff5f

View File

@ -237,7 +237,8 @@ FAR struct iob_s *iob_tryalloc(bool throttled, enum iob_user_e consumerid)
#if CONFIG_IOB_THROTTLE > 0
/* If there are free I/O buffers for this allocation */
if (sem->semcount > 0)
if (sem->semcount > 0 ||
(throttled && g_iob_sem.semcount - CONFIG_IOB_THROTTLE > 0))
#endif
{
/* Take the I/O buffer from the head of the free list */