diff options
| author | Meco Man <[email protected]> | 2021-07-31 01:37:53 +0800 |
|---|---|---|
| committer | Meco Man <[email protected]> | 2021-07-31 02:20:20 +0800 |
| commit | 619fa4d9d8ef12ae11744d412ae00805796fb4b5 (patch) | |
| tree | 794a4b36fd255c541dd03b918fdaa6c1c56871c0 /components/drivers/src/ringbuffer.c | |
| parent | d57caa7e157dcdfe6fe3fbc238df20889627b503 (diff) | |
[ringbuffer] 采用局部变量,防止出现资源竞争
Diffstat (limited to 'components/drivers/src/ringbuffer.c')
| -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 29de20b087..8d26fc45da 100644 --- a/components/drivers/src/ringbuffer.c +++ b/components/drivers/src/ringbuffer.c @@ -333,11 +333,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); |
