use std::ffi::c_double;
use std::os::raw::{c_int, c_ulong};
#[cfg(feature = "stress-test")]
use crate::core::StressConfig;
#[cfg(feature = "stress-test")]
use crate::ffi::{INITIALIZED, STRESS_CONFIG, STRESS_MODE};
#[cfg(feature = "stress-test")]
use std::sync::atomic::Ordering;
#[unsafe(no_mangle)]
#[allow(unused_variables)]
pub unsafe extern "C" fn deloxide_enable_random_stress(
probability: c_double,
min_delay_us: c_ulong,
max_delay_us: c_ulong,
) -> c_int {
#[cfg(feature = "stress-test")]
{
if INITIALIZED.load(Ordering::SeqCst) {
return 1; }
STRESS_MODE.store(1, Ordering::SeqCst);
unsafe {
STRESS_CONFIG = Some(crate::core::stress::StressConfig {
preemption_probability: probability,
min_delay_us,
max_delay_us,
preempt_after_release: true,
});
}
0
}
#[cfg(not(feature = "stress-test"))]
{
-1
}
}
#[unsafe(no_mangle)]
#[allow(unused_variables)]
pub unsafe extern "C" fn deloxide_enable_component_stress(
min_delay_us: c_ulong,
max_delay_us: c_ulong,
) -> c_int {
#[cfg(feature = "stress-test")]
{
if INITIALIZED.load(Ordering::SeqCst) {
return 1; }
STRESS_MODE.store(2, Ordering::SeqCst);
unsafe {
STRESS_CONFIG = Some(StressConfig {
preemption_probability: 0.8, min_delay_us,
max_delay_us,
preempt_after_release: true,
});
}
0
}
#[cfg(not(feature = "stress-test"))]
{
-1
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn deloxide_disable_stress() -> c_int {
#[cfg(feature = "stress-test")]
{
if INITIALIZED.load(Ordering::SeqCst) {
return 1; }
STRESS_MODE.store(0, Ordering::SeqCst);
unsafe {
STRESS_CONFIG = None;
}
0
}
#[cfg(not(feature = "stress-test"))]
{
-1
}
}