Import portable_atomic::AtomicU64 when std does not provide it

Restores support for 32-bit powerpc and mips. Fixes #10415.

Signed-off-by: Hoang Duc Hieu <code@hdhoang.space>
This commit is contained in:
hdhoang 2024-07-28 17:29:37 +07:00 committed by Johannes Altmanninger
parent ebd23c9f86
commit 7682abb703
10 changed files with 50 additions and 8 deletions

7
Cargo.lock generated
View File

@ -93,6 +93,7 @@ dependencies = [
"num-traits", "num-traits",
"once_cell", "once_cell",
"pcre2", "pcre2",
"portable-atomic",
"rand", "rand",
"rand_pcg", "rand_pcg",
"rsconf", "rsconf",
@ -319,6 +320,12 @@ version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
[[package]]
name = "portable-atomic"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265"
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.17" version = "0.2.17"

View File

@ -48,6 +48,9 @@ rand = { version = "0.8.5", features = ["small_rng"] }
widestring = "1.1.0" widestring = "1.1.0"
terminfo = "0.9.0" terminfo = "0.9.0"
[target.'cfg(not(target_has_atomic = "64"))'.dependencies]
portable-atomic = { version = "1", default-features = false, features = ["fallback"] }
[dev-dependencies] [dev-dependencies]
rand_pcg = "0.3.1" rand_pcg = "0.3.1"
serial_test = { version = "1.0.0", default-features = false } serial_test = { version = "1.0.0", default-features = false }

View File

@ -22,7 +22,11 @@ use std::marker::PhantomData;
use std::mem; use std::mem;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use std::sync::{atomic::AtomicU64, atomic::Ordering, Arc, Mutex, MutexGuard}; #[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
#[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::{atomic::Ordering, Arc, Mutex, MutexGuard};
/// Getter for universal variables. /// Getter for universal variables.
/// This is typically initialized in env_init(), and is considered empty before then. /// This is typically initialized in env_init(), and is considered empty before then.

View File

@ -1,5 +1,9 @@
#[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
use std::os::unix::prelude::*; use std::os::unix::prelude::*;
use std::sync::atomic::{AtomicU64, Ordering}; #[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::atomic::Ordering;
use std::sync::{Arc, Mutex, Weak}; use std::sync::{Arc, Mutex, Weak};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};

View File

@ -20,11 +20,15 @@ use errno::Errno;
use libc::{EAGAIN, EINTR, ENOENT, ENOTDIR, EPIPE, EWOULDBLOCK, STDOUT_FILENO}; use libc::{EAGAIN, EINTR, ENOENT, ENOTDIR, EPIPE, EWOULDBLOCK, STDOUT_FILENO};
use nix::fcntl::OFlag; use nix::fcntl::OFlag;
use nix::sys::stat::Mode; use nix::sys::stat::Mode;
#[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
use std::cell::{RefCell, UnsafeCell}; use std::cell::{RefCell, UnsafeCell};
use std::fs::File; use std::fs::File;
use std::io; use std::io;
use std::os::fd::{AsRawFd, IntoRawFd, OwnedFd, RawFd}; use std::os::fd::{AsRawFd, IntoRawFd, OwnedFd, RawFd};
use std::sync::atomic::{AtomicU64, Ordering}; #[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::atomic::Ordering;
use std::sync::{Arc, Condvar, Mutex, MutexGuard}; use std::sync::{Arc, Condvar, Mutex, MutexGuard};
/// separated_buffer_t represents a buffer of output from commands, prepared to be turned into a /// separated_buffer_t represents a buffer of output from commands, prepared to be turned into a

View File

@ -33,14 +33,18 @@ use crate::wutil::{perror, wgettext, wgettext_fmt};
use crate::{function, FLOG}; use crate::{function, FLOG};
use fish_printf::sprintf; use fish_printf::sprintf;
use libc::c_int; use libc::c_int;
#[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
use std::cell::{Ref, RefCell, RefMut}; use std::cell::{Ref, RefCell, RefMut};
use std::ffi::{CStr, OsStr}; use std::ffi::{CStr, OsStr};
use std::num::NonZeroU32; use std::num::NonZeroU32;
use std::os::fd::{AsRawFd, OwnedFd, RawFd}; use std::os::fd::{AsRawFd, OwnedFd, RawFd};
use std::os::unix::prelude::OsStrExt; use std::os::unix::prelude::OsStrExt;
use std::rc::Rc; use std::rc::Rc;
#[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::{ use std::sync::{
atomic::{AtomicIsize, AtomicU64, Ordering}, atomic::{AtomicIsize, Ordering},
Arc, Arc,
}; };

View File

@ -33,12 +33,16 @@ use libc::{
WUNTRACED, _SC_CLK_TCK, WUNTRACED, _SC_CLK_TCK,
}; };
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
#[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
use std::cell::{Cell, Ref, RefCell, RefMut}; use std::cell::{Cell, Ref, RefCell, RefMut};
use std::fs; use std::fs;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::os::fd::RawFd; use std::os::fd::RawFd;
use std::rc::Rc; use std::rc::Rc;
use std::sync::atomic::{AtomicBool, AtomicI32, AtomicU64, AtomicU8, Ordering}; #[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::atomic::{AtomicBool, AtomicI32, AtomicU8, Ordering};
use std::sync::Arc; use std::sync::Arc;
/// Types of processes. /// Types of processes.

View File

@ -20,6 +20,8 @@ use libc::{
use nix::fcntl::OFlag; use nix::fcntl::OFlag;
use nix::sys::stat::Mode; use nix::sys::stat::Mode;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
#[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
use std::cell::UnsafeCell; use std::cell::UnsafeCell;
use std::cmp; use std::cmp;
use std::io::BufReader; use std::io::BufReader;
@ -30,8 +32,10 @@ use std::ops::Range;
use std::os::fd::RawFd; use std::os::fd::RawFd;
use std::pin::Pin; use std::pin::Pin;
use std::rc::Rc; use std::rc::Rc;
#[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::atomic::Ordering; use std::sync::atomic::Ordering;
use std::sync::atomic::{AtomicI32, AtomicU32, AtomicU64, AtomicU8}; use std::sync::atomic::{AtomicI32, AtomicU32, AtomicU8};
use std::sync::{Arc, Mutex, MutexGuard}; use std::sync::{Arc, Mutex, MutexGuard};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};

View File

@ -1,7 +1,11 @@
#[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
use std::fs::File; use std::fs::File;
use std::io::Write; use std::io::Write;
use std::os::fd::{AsRawFd, IntoRawFd}; use std::os::fd::{AsRawFd, IntoRawFd};
use std::sync::atomic::{AtomicBool, AtomicU64, AtomicUsize, Ordering}; #[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use std::time::Duration; use std::time::Duration;

View File

@ -1,7 +1,11 @@
use crate::tests::prelude::*; use crate::tests::prelude::*;
use crate::topic_monitor::{GenerationsList, Topic, TopicMonitor}; use crate::topic_monitor::{GenerationsList, Topic, TopicMonitor};
#[cfg(not(target_has_atomic = "64"))]
use portable_atomic::AtomicU64;
#[cfg(target_has_atomic = "64")]
use std::sync::atomic::AtomicU64;
use std::sync::{ use std::sync::{
atomic::{AtomicU32, AtomicU64, Ordering}, atomic::{AtomicU32, Ordering},
Arc, Arc,
}; };