Closed
Description
As discovered by @ehuss in rust-lang/cargo#10120, a Cargo test is intermittently failing on Windows because a source file generated by Rustdoc is not being written before the process exits. The suspected issue is that Rustdoc spawns asynchronous writes here:
Lines 62 to 68 in f41927f
However, Rustdoc never checks that the writes are completed. We should add a mechanism that prevents the process from exiting before these write tasks are completed.
One possible solution:
- Add a field
outstanding_writes: Arc<AtomicUsize>
toDocFS
. - Increment
outstanding_writes
at the start ofDocFS::write
, and decrement at the end of the spawned Rayon task. - Add a method
DocFS::wait_for_outstanding_writes(&self)
that spin-loops untiloutstanding_writes
is zero. (Alternatively: use a condition variable, and havewrite
notify the condvar whenoutstanding_writes
is decremented.) - Either call
wait_for_outstanding_writes
explicitly in the end of the Rustdoc process, or add it as aDrop
implementation toDocFS
.