summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwinfenggao <[email protected]>2024-05-22 19:12:06 +0800
committerRbb666 <[email protected]>2024-05-27 11:28:45 +0800
commit80dc539698b7f40be8740edef42ff002d01b17bc (patch)
treeed5ff0443414ef609c0182892b6df2aa9c97873c
parent2cc2743fc73ec1645c9c84fa2d28988b5b6cbc6a (diff)
如果申请空间不足,申请不到合适的空间,需要回收new_rbb
-rw-r--r--components/drivers/ipc/ringblk_buf.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/components/drivers/ipc/ringblk_buf.c b/components/drivers/ipc/ringblk_buf.c
index ab160270c4..6196747838 100644
--- a/components/drivers/ipc/ringblk_buf.c
+++ b/components/drivers/ipc/ringblk_buf.c
@@ -215,6 +215,7 @@ rt_rbb_blk_t rt_rbb_blk_alloc(rt_rbb_t rbb, rt_size_t blk_size)
else
{
/* no space */
+ rt_slist_insert(&rbb->free_list, &new_rbb->list);
new_rbb = RT_NULL;
}
}
@@ -239,6 +240,7 @@ rt_rbb_blk_t rt_rbb_blk_alloc(rt_rbb_t rbb, rt_size_t blk_size)
else
{
/* no space */
+ rt_slist_insert(&rbb->free_list, &new_rbb->list);
new_rbb = RT_NULL;
}
}
@@ -246,16 +248,21 @@ rt_rbb_blk_t rt_rbb_blk_alloc(rt_rbb_t rbb, rt_size_t blk_size)
else
{
/* the list is empty */
- list_append(rbb, &new_rbb->list);
- new_rbb->status = RT_RBB_BLK_INITED;
- new_rbb->buf = rbb->buf;
- new_rbb->size = blk_size;
+ if(blk_size <= rbb->buf_size)
+ {
+ list_append(rbb, &new_rbb->list);
+ new_rbb->status = RT_RBB_BLK_INITED;
+ new_rbb->buf = rbb->buf;
+ new_rbb->size = blk_size;
+ }
+ else
+ {
+ /* no space */
+ rt_slist_insert(&rbb->free_list, &new_rbb->list);
+ new_rbb = RT_NULL;
+ }
}
}
- else
- {
- new_rbb = RT_NULL;
- }
rt_spin_unlock_irqrestore(&(rbb->spinlock), level);