diff options
| author | Bernard Xiong <[email protected]> | 2021-08-18 19:24:13 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-08-18 19:24:13 +0800 |
| commit | 69cd36b5d0719379be570c6ceca508c95c873de7 (patch) | |
| tree | 21a42b41d1b796706c861b1fdd3ab423ed6a319b /components | |
| parent | 37a58b53472935ecf212b57665675d153ef6ecbe (diff) | |
| parent | 619fa4d9d8ef12ae11744d412ae00805796fb4b5 (diff) | |
Merge pull request #4905 from mysterywolf/rb
[ringbuffer] rt_ringbuffer_data_len采用局部变量承接,防止出现资源竞争
Diffstat (limited to 'components')
| -rw-r--r-- | components/drivers/src/ringbuffer.c | 12 |
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); |
