diff --git a/devtools/ci/check-relaxed.sh b/devtools/ci/check-relaxed.sh new file mode 100755 index 0000000000..8f5cab29c4 --- /dev/null +++ b/devtools/ci/check-relaxed.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -euo pipefail + +case "$OSTYPE" in + darwin*) + if ! type gsed &>/dev/null || ! type ggrep &>/dev/null; then + echo "GNU sed and grep not found! You can install via Homebrew" >&2 + echo >&2 + echo " brew install grep gnu-sed" >&2 + exit 1 + fi + + SED=gsed + GREP=ggrep + ;; + *) + SED=sed + GREP=grep + ;; +esac + +function main() { + local res=$(find ./ -not -path '*/target/*' -type f -name "*.rs" | xargs grep -H "Relaxed") + + if [ -z "${res}" ]; then + echo "ok" + exit 0 + else + echo "find use Relaxed on code, please check" + + for file in ${res}; do + printf ${file} + done + + exit 1 + fi +} + +main "$@" diff --git a/devtools/ci/ci_main.sh b/devtools/ci/ci_main.sh index f3ff03a86b..33242b3035 100755 --- a/devtools/ci/ci_main.sh +++ b/devtools/ci/ci_main.sh @@ -60,6 +60,7 @@ case $GITHUB_WORKFLOW in make check-dirty-rpc-doc make check-dirty-hashes-toml devtools/ci/check-cyclic-dependencies.py + devtools/ci/check-relaxed.sh ;; ci_aarch64_build*) echo "ci_aarch64_build" diff --git a/network/src/network.rs b/network/src/network.rs index ea7a135eee..b5814d3482 100644 --- a/network/src/network.rs +++ b/network/src/network.rs @@ -485,7 +485,7 @@ impl NetworkState { /// Network message processing controller, default is true, if false, discard any received messages pub fn is_active(&self) -> bool { - self.active.load(Ordering::Relaxed) + self.active.load(Ordering::Acquire) } } @@ -1368,7 +1368,7 @@ impl NetworkController { /// Change active status, if set false discard any received messages pub fn set_active(&self, active: bool) { - self.network_state.active.store(active, Ordering::Relaxed); + self.network_state.active.store(active, Ordering::Release); } /// Return all connected peers' protocols info diff --git a/sync/src/tests/types.rs b/sync/src/tests/types.rs index a6f11e9b44..e41c0827d1 100644 --- a/sync/src/tests/types.rs +++ b/sync/src/tests/types.rs @@ -8,7 +8,10 @@ use ckb_types::{ use rand::{thread_rng, Rng}; use std::{ collections::{BTreeMap, HashMap}, - sync::atomic::{AtomicUsize, Ordering::Relaxed}, + sync::atomic::{ + AtomicUsize, + Ordering::{Acquire, SeqCst}, + }, }; use crate::types::{TtlFilter, FILTER_TTL}; @@ -64,7 +67,7 @@ fn test_get_ancestor_use_skip_list() { 0, b, |hash, _| { - count.fetch_add(1, Relaxed); + count.fetch_add(1, SeqCst); header_map.get(hash).cloned() }, |_, _| None, @@ -72,7 +75,7 @@ fn test_get_ancestor_use_skip_list() { .unwrap(); // Search must finished in steps - assert!(count.load(Relaxed) <= limit); + assert!(count.load(Acquire) <= limit); header }; diff --git a/tx-pool/src/service.rs b/tx-pool/src/service.rs index c4e9e4e0d5..6645550af8 100644 --- a/tx-pool/src/service.rs +++ b/tx-pool/src/service.rs @@ -1117,10 +1117,10 @@ impl TxPoolService { } pub fn after_delay(&self) -> bool { - self.after_delay.load(Ordering::Relaxed) + self.after_delay.load(Ordering::Acquire) } pub fn set_after_delay_true(&self) { - self.after_delay.store(true, Ordering::Relaxed); + self.after_delay.store(true, Ordering::Release); } } diff --git a/util/systemtime/src/lib.rs b/util/systemtime/src/lib.rs index 3f845bb11b..aed840fa23 100644 --- a/util/systemtime/src/lib.rs +++ b/util/systemtime/src/lib.rs @@ -58,14 +58,14 @@ impl FaketimeGuard { /// Set faketime #[cfg(feature = "enable_faketime")] pub fn set_faketime(&self, time: u64) { - FAKETIME.store(time, Ordering::Relaxed); + FAKETIME.store(time, Ordering::Release); FAKETIME_ENABLED.store(true, Ordering::SeqCst); } /// Disable faketime #[cfg(feature = "enable_faketime")] pub fn disable_faketime(&self) { - FAKETIME_ENABLED.store(false, Ordering::Relaxed); + FAKETIME_ENABLED.store(false, Ordering::Release); } }