- Fix bug in
BatchSemaphore(#167) - Fix bug in
RwLock(#170) - Add
current::reset_step_count(#175) - Add
spawn_local(#176) - Add
thread::scope(#181) - Add
AbortHandle(#182)
- Add
BatchSemaphore(#151) block_onnow has one less thread switch point, which breaks schedules. (#155)ReplayScheduler::set_target_clockadded (#156)- Schedulers now receive references to
Tasks instead ofTaskIds (#156) - Expose
check_random_with_seed(#161) - Make
check_randomoptionally take a seed by providing the environment variableSHUTTLE_RANDOM_SEED(#161) - Shuttle Explorer extension (#163).
AnnotationSchedulerand annotated schedule support added under feature "annotation" (#163)
- Implement
try_sendand iterators formpscchannels (#120) - Implement
get_mutforMutexandRwLock(#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,
Tags 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::Barrieris reused (#102) - Make
{Mutex, Condvar, RwLock}::newconst (#106) - Improve tracing spans (#99)
- Fix spurious deadlocks with
FuturesUnordered(#105) - Split schedule output over multiple lines (#103)
- Bump
futuresdependency (#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_staticsupport (#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
randand 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::parkandthread::unpark(#77) - Implement
std::hint(#78) - Rename the
asynchmodule 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_whileandCondvar::wait_timeout_while(#59) - Remove implicit
Sizedbounds onMutexandRwLock(#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
Oncecells (#49) - Simplify some dependencies to improve build times (#55)
- Move
context_switchesandmy_clockfunctions into a newcurrentmodule (#56)
- Add support for
std::sync::atomic(#33) - Add
shuttle::context_switchesto 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
tracingintroduced by #24 (#31) - Include default features for the
randcrate to fix compilation issues (#29)
- Add a timeout option to run tests for a fixed amount of time (#25)
- Include task ID in all
tracinglog 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_nowa 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