Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create a jobserver with N tokens, not N-1 #7344

Merged
merged 1 commit into from
Sep 11, 2019

Commits on Sep 9, 2019

  1. Create a jobserver with N tokens, not N-1

    I recently added `jobserver` support to the `cc` crate and ended up
    running afoul of a `jobserver` quirk on Windows. Due to how it's
    implemented, on Windows you can't actually add more than the intial
    number of tokens to the jobserver (it uses an IPC semaphore). On Unix,
    however, you can since you're just writing bytes into a pipe.
    
    In `cc`, however, I found it convenient to control parallelism by simply
    releasing a token before the parallel loop, then reacquiring the token
    after the loop. That way the loop just has to acquire a token for each
    job it wants to spawn and then release it when the job finishes. This is
    a bit simpler than trying to juggle the "implicit token" all over the
    place as well as coordinating its use. It's technically invalid because
    it allows a brief moment of `N+1` parallelism since we release a token
    and then do a bit of work to acquire a new token, but that's hopefully
    not really the end of the world.
    
    In any case this commit updates Cargo's creation of a jobserver to create
    it with `N` tokens instead of `N-1`. The same semantics are preserved
    where Cargo then immediately acquires one of the tokens, but the
    difference is that this "implicit token" can be released back to the
    jobserver pool, unlike before.
    alexcrichton committed Sep 9, 2019
    Configuration menu
    Copy the full SHA
    cab8640 View commit details
    Browse the repository at this point in the history