summaryrefslogtreecommitdiff
path: root/components/drivers/src
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2021-07-31 01:37:53 +0800
committerMeco Man <[email protected]>2021-07-31 02:20:20 +0800
commit619fa4d9d8ef12ae11744d412ae00805796fb4b5 (patch)
tree794a4b36fd255c541dd03b918fdaa6c1c56871c0 /components/drivers/src
parentd57caa7e157dcdfe6fe3fbc238df20889627b503 (diff)
[ringbuffer] 采用局部变量,防止出现资源竞争
Diffstat (limited to 'components/drivers/src')
-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 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);