When we started porting Scalar to C, one of the first things we did was to run Scalar's quite extensive set of functional tests. And there, we ran into immediate problems in the macOS job because git maintenance was registering a large number of repositories concurrently, and our code could be more robust in such scenarios. The culprit lies not with Scalar, of course, but with the way git maintenance wants to write the plist for use by launchctl and register it, every time, and if two concurrent processes try to do that, they stumble over each other. This pair of patches makes git maintenance much less fragile in those situations. Please note that this patch series conflicts with lh/systemd-timers, although in a trivial way: the latter changes the signature of launchctl_schedule_plist() to lose its cmd parameter. The resolution is to adjust the conflicting code to lose the cmd parameter, and also drop it from launchctl_list_contains_plist() (and define it in the same way as launchctl_boot_plist() does). I assume that lh/systemd-timers will advance to next pretty soon; I plan on rebasing this patch series on top of it at that stage. Derrick Stolee (1): maintenance: skip bootout/bootstrap when plist is registered Johannes Schindelin (1): maintenance: create `launchctl` configuration using a lock file builtin/gc.c | 91 ++++++++++++++++++++++++++++++++---------- t/t7900-maintenance.sh | 17 ++++++++ 2 files changed, 87 insertions(+), 21 deletions(-) base-commit: 48bf2fa8bad054d66bd79c6ba903c89c704201f7 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1024%2Fdscho%2Fmaintenance%2Flaunchctl-concurrent-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1024/dscho/maintenance/launchctl-concurrent-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/1024 -- gitgitgadget