Skip to content

Commit 5518207

Browse files
Avoid "forget" on tokens if we haven't sent them
1 parent e8c6994 commit 5518207

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/librustc_jobserver/lib.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -154,17 +154,20 @@ impl Helper {
154154
.clone()
155155
.into_helper_thread(move |token| {
156156
log::trace!("Helper thread token sending into channel");
157-
// We've acquired a token, but we need to not use it as we have our own
158-
// custom release-on-drop struct since we'll want different logic than
159-
// just normally releasing the token in this case.
160-
//
161-
// On unix this unfortunately means that we lose the specific byte that
162-
// was in the pipe (i.e., we just write back the same byte all the time)
163-
// but that's not expected to be a problem.
164-
token.expect("acquire token").drop_without_releasing();
165157
if let Some(sender) = requests2.lock().unwrap().pop_front() {
158+
// We've acquired a token, but we need to not use it as we have our own
159+
// custom release-on-drop struct since we'll want different logic than
160+
// just normally releasing the token in this case.
161+
//
162+
// On unix this unfortunately means that we lose the specific byte that
163+
// was in the pipe (i.e., we just write back the same byte all the time)
164+
// but that's not expected to be a problem.
165+
token.expect("acquire token").drop_without_releasing();
166166
sender(Acquired::new());
167167
}
168+
169+
// If we didn't manage to send the token off, just drop it on
170+
// the ground; it'll get released automatically.
168171
})
169172
.expect("spawned helper");
170173
Helper { helper, tokens: 1, requests }

0 commit comments

Comments
 (0)