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:
parent
e96a870485
commit
5b1f2dff5f
@ -237,7 +237,8 @@ FAR struct iob_s *iob_tryalloc(bool throttled, enum iob_user_e consumerid)
|
|||||||
#if CONFIG_IOB_THROTTLE > 0
|
#if CONFIG_IOB_THROTTLE > 0
|
||||||
/* If there are free I/O buffers for this allocation */
|
/* 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
|
#endif
|
||||||
{
|
{
|
||||||
/* Take the I/O buffer from the head of the free list */
|
/* Take the I/O buffer from the head of the free list */
|
||||||
|
Loading…
Reference in New Issue
Block a user