mirror of
https://github.com/docker/compose.git
synced 2026-10-12 02:13:08 +00:00
runPlugin held the global mutex — there to guard concurrent writes to project.Services — across ensureServiceRelay, whose Docker API work (list, create, image pull, start, a 30s removal wait) forced every concurrent provider to wait on the slowest one. The mutex now covers only the shared-state work: env-var injection plus the relay's network selection, which reads project.Services and must not race with another provider's writes. The relay is deployed after the lock is released, taking the pre-computed network keys — simply unlocking around the call, as first suggested, would have traded the serialization for a data race on the services map. Co-Authored-By: Claude Fable 5 <[email protected]> Signed-off-by: Nicolas De Loof <[email protected]>