Skip to content

Commit e96a0a8

Browse files
committed
Revert "Do not call getpid wrapper after fork in tests"
This reverts commit 12fbabd. It was only needed because of using raw `clone3` instead of `fork`, but we only do that now when a pidfd is requested.
1 parent 6edaaa6 commit e96a0a8

File tree

2 files changed

+7
-35
lines changed

2 files changed

+7
-35
lines changed

src/test/ui/command/command-pre-exec.rs

+6-19
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,15 @@
88
// ignore-sgx no processes
99
#![feature(process_exec, rustc_private)]
1010

11+
extern crate libc;
12+
1113
use std::env;
1214
use std::io::Error;
1315
use std::os::unix::process::CommandExt;
1416
use std::process::Command;
1517
use std::sync::atomic::{AtomicUsize, Ordering};
1618
use std::sync::Arc;
1719

18-
#[cfg(not(target_os = "linux"))]
19-
fn getpid() -> u32 {
20-
use std::process;
21-
process::id()
22-
}
23-
24-
/// We need to directly use the getpid syscall instead of using `process::id()`
25-
/// because the libc wrapper might return incorrect values after a process was
26-
/// forked.
27-
#[cfg(target_os = "linux")]
28-
fn getpid() -> u32 {
29-
extern crate libc;
30-
unsafe {
31-
libc::syscall(libc::SYS_getpid) as _
32-
}
33-
}
34-
3520
fn main() {
3621
if let Some(arg) = env::args().nth(1) {
3722
match &arg[..] {
@@ -83,12 +68,14 @@ fn main() {
8368
};
8469
assert_eq!(output.raw_os_error(), Some(102));
8570

86-
let pid = getpid();
71+
let pid = unsafe { libc::getpid() };
72+
assert!(pid >= 0);
8773
let output = unsafe {
8874
Command::new(&me)
8975
.arg("empty")
9076
.pre_exec(move || {
91-
let child = getpid();
77+
let child = libc::getpid();
78+
assert!(child >= 0);
9279
assert!(pid != child);
9380
Ok(())
9481
})

src/test/ui/process/process-panic-after-fork.rs

+1-16
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,6 @@ use std::sync::atomic::{AtomicU32, Ordering};
2323

2424
use libc::c_int;
2525

26-
#[cfg(not(target_os = "linux"))]
27-
fn getpid() -> u32 {
28-
process::id()
29-
}
30-
31-
/// We need to directly use the getpid syscall instead of using `process::id()`
32-
/// because the libc wrapper might return incorrect values after a process was
33-
/// forked.
34-
#[cfg(target_os = "linux")]
35-
fn getpid() -> u32 {
36-
unsafe {
37-
libc::syscall(libc::SYS_getpid) as _
38-
}
39-
}
40-
4126
/// This stunt allocator allows us to spot heap allocations in the child.
4227
struct PidChecking<A> {
4328
parent: A,
@@ -59,7 +44,7 @@ impl<A> PidChecking<A> {
5944
fn check(&self) {
6045
let require_pid = self.require_pid.load(Ordering::Acquire);
6146
if require_pid != 0 {
62-
let actual_pid = getpid();
47+
let actual_pid = process::id();
6348
if require_pid != actual_pid {
6449
unsafe {
6550
libc::raise(libc::SIGUSR1);

0 commit comments

Comments
 (0)