File tree Expand file tree Collapse file tree 2 files changed +7
-35
lines changed Expand file tree Collapse file tree 2 files changed +7
-35
lines changed Original file line number Diff line number Diff line change 88// ignore-sgx no processes
99#![ feature( process_exec, rustc_private) ]
1010
11+ extern crate libc;
12+
1113use std:: env;
1214use std:: io:: Error ;
1315use std:: os:: unix:: process:: CommandExt ;
1416use std:: process:: Command ;
1517use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
1618use 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-
3520fn 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 } )
Original file line number Diff line number Diff line change @@ -23,21 +23,6 @@ use std::sync::atomic::{AtomicU32, Ordering};
2323
2424use 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.
4227struct 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 ) ;
You can’t perform that action at this time.
0 commit comments