fix: WAL mode + busy_timeout for SQLite, fix rate limiter TOCTOU race

This commit is contained in:
2026-05-04 22:10:19 +02:00
parent 5852af0b05
commit a49fbad26c
2 changed files with 10 additions and 7 deletions

View File

@@ -35,14 +35,15 @@ impl RateLimiter {
.unwrap_or_default()
.as_secs()
/ 60;
let prev = self.window.load(Ordering::Relaxed);
let prev = self.window.load(Ordering::Acquire);
if now != prev {
self.window.store(now, Ordering::Relaxed);
self.count.store(1, Ordering::Relaxed);
true
} else {
self.count.fetch_add(1, Ordering::Relaxed) + 1 <= self.limit
// compare_exchange ensures only one thread wins the window reset
if self.window.compare_exchange(prev, now, Ordering::AcqRel, Ordering::Relaxed).is_ok() {
self.count.store(1, Ordering::Release);
return true;
}
}
self.count.fetch_add(1, Ordering::Relaxed) + 1 <= self.limit
}
}