Skip to content

jobserver updates jobserver-auth from old style R,W to new style fifo:PATH for children though children may not be compatible with fifo:PATH style auth #99

Closed
@IceTDrinker

Description

@IceTDrinker

Hello,

As discussed in this zulip thread: https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo/topic/does.20Cargo.20inject.20fifo.3APATH.20style.20jobserver-auth.20in.20MAKEFLAG/near/447522824

We have a build case with rust that started failing on newer nightly toolchains, the crash stemmed from a fifo:PATH style jobserver-auth being forwarded in a build.rs to a make command (with version < 4.4) that is not compatible with the fifo:PATH style auth, when the make command tried to run it crashed indicating it did not support the fifo:PATH auth.

@the8472 pointed out this piece of code

jobserver-rs/src/unix.rs

Lines 168 to 181 in c0c2898

// Optimization: Try converting it to a fifo by using /dev/fd
//
// On linux, opening `/dev/fd/$fd` returns a fd with a new file description,
// so we can set `O_NONBLOCK` on it without affecting other processes.
//
// On macOS, opening `/dev/fd/$fd` seems to be the same as `File::try_clone`.
//
// I tested this on macOS 14 and Linux 6.5.13
#[cfg(target_os = "linux")]
if let Ok(Some(jobserver)) =
Self::from_fifo(&format!("fifo:/dev/fd/{}", read.as_raw_fd()))
{
return Ok(Some(jobserver));
}

which breaks compatibility if the new fifo:PATH auth is forwarded to incompatible children processes.

Thanks a lot for the swift support!

Cheers

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions