5851974b20
Release fork infrastructure: - REDBEAR_RELEASE=0.1.1 with offline enforcement (fetch/distclean/unfetch blocked) - 195 BLAKE3-verified source archives in standard format - Atomic provisioning via provision-release.sh (staging + .complete sentry) - 5-phase improvement plan: restore format auto-detection, source tree validation (validate-source-trees.py), archive-map.json, REPO_BINARY fallback Archive normalization: - Removed 87 duplicate/unversioned archives from shared pool - Regenerated all archives in consistent format with source/ + recipe.toml - BLAKE3SUMS and manifest.json generated from stable tarball set Patch management: - verify-patches.sh: pre-sync dry-run report (OK/REVERSED/CONFLICT) - 121 upstream-absorbed patches moved to absorbed/ directories - 43 active patches verified clean against rebased sources - Stress test: base updated to upstream HEAD, relibc reset and patched Compilation fixes: - relibc: Vec imports in redox-rt (proc.rs, lib.rs, sys.rs) - relibc: unsafe from_raw_parts in mod.rs (2024 edition) - fetch.rs: rev comparison handles short/full hash prefixes - kibi recipe: corrected rev mismatch New scripts: restore-sources.sh, provision-release.sh, verify-sources-archived.sh, check-upstream-releases.sh, validate-source-trees.py, verify-patches.sh, repair-archive-format.sh, generate-manifest.py Documentation: AGENTS.md, README.md, local/AGENTS.md updated for release fork model
43 lines
1.6 KiB
Plaintext
43 lines
1.6 KiB
Plaintext
diff --git a/src/sync/pthread_mutex.rs b/src/sync/pthread_mutex.rs
|
|
index 2871a6149..3c8e73f15 100644
|
|
--- a/src/sync/pthread_mutex.rs
|
|
+++ b/src/sync/pthread_mutex.rs
|
|
@@ -35,7 +35,7 @@ const FUTEX_OWNER_DIED: u32 = 1 << 30;
|
|
const INDEX_MASK: u32 = !(WAITING_BIT | FUTEX_OWNER_DIED);
|
|
// TODO: Lower limit is probably better.
|
|
const RECURSIVE_COUNT_MAX_INCLUSIVE: u32 = u32::MAX;
|
|
-const SPIN_COUNT: usize = 0;
|
|
+const SPIN_COUNT: usize = 100;
|
|
|
|
impl RlctMutex {
|
|
pub(crate) fn new(attr: &RlctMutexAttr) -> Result<Self, Errno> {
|
|
diff --git a/src/sync/barrier.rs b/src/sync/barrier.rs
|
|
index b5847b5..a8e3c2f0 100644
|
|
--- a/src/sync/barrier.rs
|
|
+++ b/src/sync/barrier.rs
|
|
@@ -47,6 +47,9 @@ impl Barrier {
|
|
cvar: FutexState::new(count.get()),
|
|
}
|
|
}
|
|
+ pub fn destroy(&self) {}
|
|
+
|
|
pub fn wait(&self) -> WaitResult {
|
|
let _ = &self.lock;
|
|
let sense = self.cvar.sense.load(Ordering::Acquire);
|
|
diff --git a/src/header/pthread/barrier.rs b/src/header/pthread/barrier.rs
|
|
index 1a5df3a..e69e2b9 100644
|
|
--- a/src/header/pthread/barrier.rs
|
|
+++ b/src/header/pthread/barrier.rs
|
|
@@ -24,10 +24,10 @@ pub(crate) struct RlctBarrierAttr {
|
|
// Not async-signal-safe.
|
|
#[unsafe(no_mangle)]
|
|
pub unsafe extern "C" fn pthread_barrier_destroy(barrier: *mut pthread_barrier_t) -> c_int {
|
|
- // Behavior is undefined if any thread is currently waiting when this is called.
|
|
-
|
|
- // No-op, currently.
|
|
- unsafe { core::ptr::drop_in_place(barrier.cast::<RlctBarrier>()) };
|
|
+ let barrier = unsafe { &*barrier.cast::<RlctBarrier>() };
|
|
+ barrier.destroy();
|
|
|
|
0
|
|
} |