High-performance implementation of plcbundle written in Rust

fix(rate_limiter): adjust permit refill logic to prevent starvation

+2 -6
+2 -6
src/plc_client.rs
··· 315 315 // CRITICAL: Add first permit immediately, then refill at steady rate 316 316 let refill_rate_clone = refill_rate; 317 317 tokio::spawn(async move { 318 - // Add first permit immediately so first request can proceed 319 - if sem_clone.available_permits() < requests_per_period { 318 + if sem_clone.available_permits() < 1 { 320 319 sem_clone.add_permits(1); 321 320 } 322 321 323 - // Then refill at steady rate 324 322 loop { 325 323 tokio::time::sleep(refill_rate_clone).await; 326 - // Add one permit if under capacity 327 - // This creates a token bucket: max capacity is requests_per_period 328 - if sem_clone.available_permits() < requests_per_period { 324 + if sem_clone.available_permits() < 1 { 329 325 sem_clone.add_permits(1); 330 326 } 331 327 }