Bug Fixes
-
don't append a whole
periodic()interval to everyin_parallel_with_slicecall
The interrupt-watching thread sleeps out its whole interval, and
stop_everythingis only set at the end of the enclosingstd::thread::scope,
after every worker has been joined. The watcher lives in that same scope, so the
sleep is appended to the call rather than overlapped with it: the function cannot
return in less than one interval however little work it was given, and all of
that interval is dead time.gix-pack's delta traversal asks for 50 ms andTree::traverseis
unconditional inwrite_data_iter_to_stream, so everyindex-packpays it. An
8-object 490-byte pack — a five-file commit — measured 50.22 ms as the minimum of
101 calls, for 3 ms of process CPU, with no sample of a hundred below 45 ms.
strace -e trace=clock_nanosleepshows exactly one 50 ms sleep per call.Park instead of sleeping, and unpark once there is nothing left to watch. The
inner loop re-parks for the remaining time so a spurious wake-up cannot shorten
the interval a caller asked for, and no mutex is needed because anunparkthat
arrives before thepark_timeoutis remembered by the park token. The three
exits of the join loop — normal, consumer error, worker panic — all unpark, so a
failure is not held open for an interval either.
Commit Statistics
- 5 commits contributed to the release over the course of 30 calendar days.
- 30 days passed between releases.
- 1 commit was understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
Commit Details
view details
- Uncategorized
- Update manifests prior to release (ebe9095)
- Merge pull request #2877 from Ignalina/fix/in-parallel-with-slice-watcher-sleep (c08cdc8)
- Review (9fe5c02)
- Don't append a whole
periodic()interval to everyin_parallel_with_slicecall (5f882bc) - Merge pull request #2812 from GitoxideLabs/report-july (ae8845a)