Skip to content

Commit f17e7ad

Browse files
committed
Changed AtomicUsize to usize
1 parent 025d779 commit f17e7ad

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

bpf-ring-buffer/src/lib.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::{
22
fmt, io, mem,
33
os::unix::io::AsRawFd,
44
ptr, slice,
5-
sync::atomic::{AtomicBool, AtomicUsize, Ordering},
5+
sync::atomic::{AtomicBool, Ordering},
66
};
77

88
pub trait RingBufferData
@@ -37,17 +37,17 @@ impl AsRawFd for RingBuffer {
3737

3838
struct RingBufferObserver {
3939
page_size: usize,
40-
data: Box<[AtomicUsize]>,
41-
consumer_pos: Box<AtomicUsize>,
42-
producer_pos: Box<AtomicUsize>,
40+
data: Box<[usize]>,
41+
consumer_pos: Box<usize>,
42+
producer_pos: Box<usize>,
4343
epfd: i32,
4444
event: [epoll::Event; 1],
4545
}
4646

4747
impl RingBufferObserver {
4848
#[allow(clippy::len_without_is_empty)]
4949
fn len(&self) -> usize {
50-
self.data.len() * mem::size_of::<AtomicUsize>()
50+
self.data.len() * mem::size_of::<usize>()
5151
}
5252
}
5353

@@ -89,7 +89,7 @@ impl RingBuffer {
8989
return Err(io::Error::last_os_error());
9090
}
9191

92-
Box::from_raw(p as *mut AtomicUsize)
92+
Box::from_raw(p as *mut usize)
9393
};
9494

9595
// producers page and the buffer itself,
@@ -112,12 +112,12 @@ impl RingBuffer {
112112
return Err(io::Error::last_os_error());
113113
}
114114

115-
let length = max_length * 2 / mem::size_of::<AtomicUsize>();
115+
let length = max_length * 2 / mem::size_of::<usize>();
116116
let q = (p as usize) + page_size;
117-
let q = slice::from_raw_parts_mut(q as *mut AtomicUsize, length);
117+
let q = slice::from_raw_parts_mut(q as *mut usize, length);
118118
(
119-
Box::from_raw(p as *mut AtomicUsize),
120-
Box::from_raw(q as *mut [AtomicUsize]),
119+
Box::from_raw(p as *mut usize),
120+
Box::from_raw(q as *mut [usize]),
121121
)
122122
};
123123

@@ -163,9 +163,7 @@ impl RingBuffer {
163163
}
164164

165165
fn read_finish(&mut self) {
166-
self.observer
167-
.consumer_pos
168-
.store(self.consumer_pos_value, Ordering::Release);
166+
*self.observer.consumer_pos = self.consumer_pos_value;
169167
}
170168

171169
fn read_slice<D>(&mut self) -> Result<(Option<D>, usize), Error>
@@ -176,7 +174,7 @@ impl RingBuffer {
176174
const BUSY_BIT: usize = 1 << 31;
177175
const DISCARD_BIT: usize = 1 << 30;
178176

179-
let pr_pos = self.observer.producer_pos.load(Ordering::Acquire);
177+
let pr_pos = *self.observer.producer_pos;
180178
if self.consumer_pos_value < pr_pos {
181179
// determine how far we are, how many unseen data is in the buffer
182180
let distance = pr_pos - self.consumer_pos_value;
@@ -194,8 +192,8 @@ impl RingBuffer {
194192
// the first 8 bytes of the memory slice is a header (length and flags)
195193
let (header, data_offset) = {
196194
let masked_pos = self.consumer_pos_value & self.mask;
197-
let index_in_array = masked_pos / mem::size_of::<AtomicUsize>();
198-
let header = self.observer.data[index_in_array].load(Ordering::Acquire);
195+
let index_in_array = masked_pos / mem::size_of::<usize>();
196+
let header = self.observer.data[index_in_array];
199197
// keep only 32 bits
200198
(header & 0xffffffff, masked_pos + HEADER_SIZE)
201199
};
@@ -334,8 +332,8 @@ impl Drop for RingBufferObserver {
334332
fn drop(&mut self) {
335333
epoll::close(self.epfd).unwrap_or_default();
336334
let len = self.len();
337-
let p = mem::replace(&mut self.consumer_pos, Box::new(AtomicUsize::new(0)));
338-
let q = mem::replace(&mut self.producer_pos, Box::new(AtomicUsize::new(0)));
335+
let p = mem::replace(&mut self.consumer_pos, Box::new(0));
336+
let q = mem::replace(&mut self.producer_pos, Box::new(0));
339337
let data = mem::replace(&mut self.data, Box::new([]));
340338
unsafe {
341339
libc::munmap(Box::into_raw(p) as *mut _, self.page_size);

0 commit comments

Comments
 (0)