Skip to content

Commit 417ba5b

Browse files
author
Motoyuki Kimura
committed
[#1178] Fix loom build
1 parent c6cd8c5 commit 417ba5b

6 files changed

Lines changed: 51 additions & 39 deletions

File tree

iceoryx2-bb/lock-free/src/spsc/index_queue.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -206,14 +206,7 @@ pub mod details {
206206
.as_ptr()
207207
.add((position % self.capacity as u64) as usize);
208208

209-
#[cfg(all(test, loom, feature = "std"))]
210-
{
211-
cell.get_mut().deref() as *mut u64
212-
}
213-
#[cfg(not(all(test, loom, feature = "std")))]
214-
{
215-
cell.get()
216-
}
209+
cell.get()
217210
}
218211

219212
/// Acquires the [`Producer`] of the [`IndexQueue`]. This is threadsafe and lock-free without

iceoryx2-pal/concurrency-sync/src/atomic.rs

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,18 @@ impl<T: internal::AtomicInteger> Atomic<T> {
230230
}
231231
}
232232

233+
#[cfg(not(all(test, loom, feature = "std")))]
234+
#[inline(always)]
235+
fn get_ptr(&self) -> *mut T {
236+
self.data.get()
237+
}
238+
239+
#[cfg(all(test, loom, feature = "std"))]
240+
#[inline(always)]
241+
fn get_ptr(&self) -> *mut T {
242+
unsafe { self.data.get().deref() as *const T as *mut T }
243+
}
244+
233245
fn read_lock(&self) {
234246
self.lock.read_lock(|_, _| WaitAction::Continue);
235247
}
@@ -244,10 +256,17 @@ impl<T: internal::AtomicInteger> Atomic<T> {
244256
}
245257

246258
/// See [`core::sync::atomic::AtomicU64::as_ptr()`]
259+
#[cfg(not(all(test, loom, feature = "std")))]
247260
pub const fn as_ptr(&self) -> *mut T {
248261
self.data.get()
249262
}
250263

264+
/// See [`core::sync::atomic::AtomicU64::as_ptr()`]
265+
#[cfg(all(test, loom, feature = "std"))]
266+
pub fn as_ptr(&self) -> *mut T {
267+
self.get_ptr()
268+
}
269+
251270
/// See [`core::sync::atomic::AtomicU64::compare_exchange()`]
252271
pub fn compare_exchange(
253272
&self,
@@ -257,14 +276,14 @@ impl<T: internal::AtomicInteger> Atomic<T> {
257276
_failure: Ordering,
258277
) -> Result<T, T> {
259278
self.write_lock();
260-
let data = unsafe { *self.data.get() };
279+
let data = unsafe { *self.get_ptr() };
261280
if data != current {
262281
fence(Ordering::SeqCst);
263282
self.unlock();
264283
return Err(data);
265284
}
266285

267-
unsafe { *self.data.get() = new };
286+
unsafe { *self.get_ptr() = new };
268287
fence(Ordering::SeqCst);
269288
self.unlock();
270289
Ok(data)
@@ -293,8 +312,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
293312
pub fn fetch_add(&self, value: T, order: Ordering) -> T {
294313
self.fetch_op(
295314
|| {
296-
let old = unsafe { *self.data.get() };
297-
unsafe { *self.data.get() = old.overflowing_add(value).0 };
315+
let old = unsafe { *self.get_ptr() };
316+
unsafe { *self.get_ptr() = old.overflowing_add(value).0 };
298317
old
299318
},
300319
order,
@@ -305,8 +324,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
305324
pub fn fetch_and(&self, value: T, order: Ordering) -> T {
306325
self.fetch_op(
307326
|| {
308-
let old = unsafe { *self.data.get() };
309-
unsafe { *self.data.get() &= value };
327+
let old = unsafe { *self.get_ptr() };
328+
unsafe { *self.get_ptr() &= value };
310329
old
311330
},
312331
order,
@@ -317,8 +336,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
317336
pub fn fetch_max(&self, value: T, order: Ordering) -> T {
318337
self.fetch_op(
319338
|| {
320-
let old = unsafe { *self.data.get() };
321-
unsafe { *self.data.get() = old.max(value) };
339+
let old = unsafe { *self.get_ptr() };
340+
unsafe { *self.get_ptr() = old.max(value) };
322341
old
323342
},
324343
order,
@@ -329,8 +348,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
329348
pub fn fetch_min(&self, value: T, order: Ordering) -> T {
330349
self.fetch_op(
331350
|| {
332-
let old = unsafe { *self.data.get() };
333-
unsafe { *self.data.get() = old.min(value) };
351+
let old = unsafe { *self.get_ptr() };
352+
unsafe { *self.get_ptr() = old.min(value) };
334353
old
335354
},
336355
order,
@@ -341,8 +360,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
341360
pub fn fetch_nand(&self, value: T, order: Ordering) -> T {
342361
self.fetch_op(
343362
|| {
344-
let old = unsafe { *self.data.get() };
345-
unsafe { *self.data.get() = !(old & value) };
363+
let old = unsafe { *self.get_ptr() };
364+
unsafe { *self.get_ptr() = !(old & value) };
346365
old
347366
},
348367
order,
@@ -353,8 +372,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
353372
pub fn fetch_or(&self, value: T, order: Ordering) -> T {
354373
self.fetch_op(
355374
|| {
356-
let old = unsafe { *self.data.get() };
357-
unsafe { *self.data.get() |= value };
375+
let old = unsafe { *self.get_ptr() };
376+
unsafe { *self.get_ptr() |= value };
358377
old
359378
},
360379
order,
@@ -365,8 +384,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
365384
pub fn fetch_sub(&self, value: T, order: Ordering) -> T {
366385
self.fetch_op(
367386
|| {
368-
let old = unsafe { *self.data.get() };
369-
unsafe { *self.data.get() = old.overflowing_sub(value).0 };
387+
let old = unsafe { *self.get_ptr() };
388+
unsafe { *self.get_ptr() = old.overflowing_sub(value).0 };
370389
old
371390
},
372391
order,
@@ -381,11 +400,11 @@ impl<T: internal::AtomicInteger> Atomic<T> {
381400
mut f: F,
382401
) -> Result<T, T> {
383402
self.write_lock();
384-
let data = unsafe { *self.data.get() };
403+
let data = unsafe { *self.get_ptr() };
385404

386405
match f(data) {
387406
Some(v) => {
388-
unsafe { *self.data.get() = v };
407+
unsafe { *self.get_ptr() = v };
389408
fence(Ordering::SeqCst);
390409
self.unlock();
391410
Ok(data)
@@ -402,8 +421,8 @@ impl<T: internal::AtomicInteger> Atomic<T> {
402421
pub fn fetch_xor(&self, value: T, order: Ordering) -> T {
403422
self.fetch_op(
404423
|| {
405-
let old = unsafe { *self.data.get() };
406-
unsafe { *self.data.get() ^= value };
424+
let old = unsafe { *self.get_ptr() };
425+
unsafe { *self.get_ptr() ^= value };
407426
old
408427
},
409428
order,
@@ -412,13 +431,13 @@ impl<T: internal::AtomicInteger> Atomic<T> {
412431

413432
/// See [`core::sync::atomic::AtomicU64::into_inner()`]
414433
pub fn into_inner(self) -> T {
415-
unsafe { *self.data.get() }
434+
unsafe { *self.get_ptr() }
416435
}
417436

418437
/// See [`core::sync::atomic::AtomicU64::load()`]
419438
pub fn load(&self, _order: Ordering) -> T {
420439
self.read_lock();
421-
let data = unsafe { *self.data.get() };
440+
let data = unsafe { *self.get_ptr() };
422441
fence(Ordering::SeqCst);
423442
self.unlock();
424443
data
@@ -427,16 +446,16 @@ impl<T: internal::AtomicInteger> Atomic<T> {
427446
/// See [`core::sync::atomic::AtomicU64::store()`]
428447
pub fn store(&self, value: T, _order: Ordering) {
429448
self.write_lock();
430-
unsafe { *self.data.get() = value };
449+
unsafe { *self.get_ptr() = value };
431450
fence(Ordering::SeqCst);
432451
self.unlock();
433452
}
434453

435454
/// See [`core::sync::atomic::AtomicU64::swap()`]
436455
pub fn swap(&self, value: T, _order: Ordering) -> T {
437456
self.write_lock();
438-
let data = unsafe { *self.data.get() };
439-
unsafe { *self.data.get() = value };
457+
let data = unsafe { *self.get_ptr() };
458+
unsafe { *self.get_ptr() = value };
440459
fence(Ordering::SeqCst);
441460
self.unlock();
442461
data

iceoryx2-pal/concurrency-sync/src/cell.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ pub type RefMut<'a, T> = core::cell::RefMut<'a, T>;
3030
pub type UnsafeCell<T> = core::cell::UnsafeCell<T>;
3131

3232
#[cfg(all(test, loom, feature = "std"))]
33-
use loom::cell::UnsafeCell;
33+
pub(crate) type UnsafeCell<T> = loom::cell::UnsafeCell<T>;

iceoryx2-pal/concurrency-sync/src/mutex.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ impl Mutex {
3838
#[cfg(all(test, loom, feature = "std"))]
3939
pub fn new() -> Self {
4040
Self {
41-
state: IoxAtomicU32::new(0),
41+
state: AtomicU32::new(0),
4242
}
4343
}
4444

iceoryx2-pal/concurrency-sync/src/once.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ impl Once {
7474
#[cfg(all(test, loom, feature = "std"))]
7575
pub fn new() -> Self {
7676
Self {
77-
state: IoxAtomicU8::new(State::Incomplete as u8),
77+
state: AtomicU8::new(State::Incomplete as u8),
7878
}
7979
}
8080

iceoryx2-pal/concurrency-sync/src/rwlock.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl RwLockReaderPreference {
4040
#[cfg(all(test, loom, feature = "std"))]
4141
pub fn new() -> Self {
4242
Self {
43-
reader_count: IoxAtomicU32::new(UNLOCKED),
43+
reader_count: AtomicU32::new(UNLOCKED),
4444
}
4545
}
4646

@@ -180,8 +180,8 @@ impl RwLockWriterPreference {
180180
#[cfg(all(test, loom, feature = "std"))]
181181
pub fn new() -> Self {
182182
Self {
183-
state: IoxAtomicU32::new(UNLOCKED),
184-
writer_wake_counter: IoxAtomicU32::new(0),
183+
state: AtomicU32::new(UNLOCKED),
184+
writer_wake_counter: AtomicU32::new(0),
185185
}
186186
}
187187

0 commit comments

Comments
 (0)