summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2021-08-18 19:24:13 +0800
committerGitHub <[email protected]>2021-08-18 19:24:13 +0800
commit69cd36b5d0719379be570c6ceca508c95c873de7 (patch)
tree21a42b41d1b796706c861b1fdd3ab423ed6a319b /components
parent37a58b53472935ecf212b57665675d153ef6ecbe (diff)
parent619fa4d9d8ef12ae11744d412ae00805796fb4b5 (diff)
Merge pull request #4905 from mysterywolf/rb
[ringbuffer] rt_ringbuffer_data_len采用局部变量承接,防止出现资源竞争
Diffstat (limited to 'components')
-rw-r--r--components/drivers/src/ringbuffer.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/components/drivers/src/ringbuffer.c b/components/drivers/src/ringbuffer.c
index f01a594609..c94d960f44 100644
--- a/components/drivers/src/ringbuffer.c
+++ b/components/drivers/src/ringbuffer.c
@@ -335,11 +335,15 @@ rt_size_t rt_ringbuffer_data_len(struct rt_ringbuffer *rb)
return rb->buffer_size;
case RT_RINGBUFFER_HALFFULL:
default:
- if (rb->write_index > rb->read_index)
- return rb->write_index - rb->read_index;
+ {
+ rt_size_t wi = rb->write_index, ri = rb->read_index;
+
+ if (wi > ri)
+ return wi - ri;
else
- return rb->buffer_size - (rb->read_index - rb->write_index);
- };
+ return rb->buffer_size - (ri - wi);
+ }
+ }
}
RTM_EXPORT(rt_ringbuffer_data_len);