When a multithreaded frame (zstdmt feature, CParameter::NbWorkers) is
left unfinished, its jobs may still be running on the worker threads: the C
library only waits for them when the next frame starts, or when the context
is freed. A session reset makes the context accept changes again in the
meantime, so:
load_dictionary, ref_cdict, ref_prefix,
disable_dictionary, init*, or reset with parameters) freed the
dictionary a worker was still compressing against;NbWorkers made the next frame resize the job table before
waiting for the old jobs.The flaw was corrected by refusing these calls while a multithreaded frame
is unfinished. The new CCtx::wait_for_workers() waits for the workers
first.
{
"license": "CC0-1.0"
}{
"affected_functions": null,
"affects": {
"arch": [],
"functions": [
"zstd_safe::CCtx::disable_dictionary",
"zstd_safe::CCtx::init",
"zstd_safe::CCtx::load_dictionary",
"zstd_safe::CCtx::ref_cdict",
"zstd_safe::CCtx::ref_prefix",
"zstd_safe::CCtx::reset",
"zstd_safe::CCtx::set_parameter"
],
"os": []
}
}