- Add
BatchSemaphore
(#151) block_on
now has one less thread switch point, which breaks schedules. (#155)ReplayScheduler::set_target_clock
added (#156)- Schedulers now receive references to
Task
s instead ofTaskId
s (#156) - Expose
check_random_with_seed
(#161) - Make
check_random
optionally take a seed by providing the environment variableSHUTTLE_RANDOM_SEED
(#161) - Shuttle Explorer extension (#163).
AnnotationScheduler
and annotated schedule support added under feature "annotation" (#163)
- Implement
try_send
and iterators formpsc
channels (#120) - Implement
get_mut
forMutex
andRwLock
(#120)
- Add support for task labels. These replace task tags, which are deprecated and will be removed in a future release. (#138)
- In the meantime,
Tag
s are now implemented with a trait. This is a breaking change from 0.6.1. (#111) - Implement
is_finished()
forfuture::JoinHandle
(#118)
- Add feature to tag tasks (#98)
- Add scheduler to check for uncontrolled nondeterminism (#96, #97)
- Support spurious wakeups for
thread::park
(#101) - Support different leaders when
sync::Barrier
is reused (#102) - Make
{Mutex, Condvar, RwLock}::new
const (#106) - Improve tracing spans (#99)
- Fix spurious deadlocks with
FuturesUnordered
(#105) - Split schedule output over multiple lines (#103)
- Bump
futures
dependency (#107)
This version renames the silence_atomic_ordering_warning
configuration option to silence_warnings
, as well as the corresponding environment variables, to enable future warnings to be controlled by the same mechanism.
- Implement
lazy_static
support (#93)
This version updates the embedded rand
library to v0.8.
Tests that use shuttle::rand
will need to update to the v0.8 interface of rand
,
which included some breaking changes.
- Update
rand
and other dependencies (#89) - Implement abort for
future::JoinHandle
(#87) - Correctly handle the main thread's thread-local storage destructors (#88)
- Make PCT scheduling not linear in max number of tasks (#84)
- Dependency updates
Note that clients using async primitives provided by Shuttle (task spawn
, block_on
, yield_now
) will
need to be updated due to the renaming of the asynch
module to future
in this release.
- Rust 2021 conversion and dependency bumps (#76)
- Implement
thread::park
andthread::unpark
(#77) - Implement
std::hint
(#78) - Rename the
asynch
module tofuture
(#79)
Note that failing test schedules created by versions of Shuttle before 0.2.0 will not successfully
replay
on version 0.2.0, and vice versa, as the changes below affect Mutex
and RwLock
scheduling decisions.
- Implement
Mutex::try_lock
(#71) - Implement
RwLock::{try_read, try_write}
(#72) - Export a version of
std::sync::Weak
(#69) - Provide better error messages for deadlocks caused by non-reentrant locking (#66)
- Implement
Condvar::wait_while
andCondvar::wait_timeout_while
(#59) - Remove implicit
Sized
bounds onMutex
andRwLock
(#62) - Dependency updates (#58, #60)
- Fix a number of issues in support for async tasks (#50, #51, #52, #54)
- Improve error messages when using Shuttle primitives outside a Shuttle test (#42)
- Add support for thread local storage (the
thread_local!
macro) (#43, #53) - Add support for
Once
cells (#49) - Simplify some dependencies to improve build times (#55)
- Move
context_switches
andmy_clock
functions into a newcurrent
module (#56)
- Add support for
std::sync::atomic
(#33) - Add
shuttle::context_switches
to get a logical clock for an execution (#37) - Track causality between threads (#38)
- Better handling for double panics and poisoned locks (#30, #40)
- Add option to not persist failures (#34)
- Fix a performance regression with
tracing
introduced by #24 (#31) - Include default features for the
rand
crate to fix compilation issues (#29)
- Add a timeout option to run tests for a fixed amount of time (#25)
- Include task ID in all
tracing
log output (#24) - Implement
thread::current
(#23)
- Update for Rust 1.51 (#11)
- Add option to bound how many steps a test runs on each iterations (#14)
- Remove option to configure the maximum number of threads/tasks (#16, #19)
- Make
yield_now
a hint to the scheduler to allow validating busy loops (#18) - Add
ReplayScheduler::new_from_file
(#20)
- Add Default impl to RwLock (#7)
- Add option to persist schedules to a file (#4)
- Initial release