File tree 2 files changed +7
-35
lines changed
2 files changed +7
-35
lines changed Original file line number Diff line number Diff line change 8
8
// ignore-sgx no processes
9
9
#![ feature( process_exec, rustc_private) ]
10
10
11
+ extern crate libc;
12
+
11
13
use std:: env;
12
14
use std:: io:: Error ;
13
15
use std:: os:: unix:: process:: CommandExt ;
14
16
use std:: process:: Command ;
15
17
use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
16
18
use std:: sync:: Arc ;
17
19
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
-
35
20
fn main ( ) {
36
21
if let Some ( arg) = env:: args ( ) . nth ( 1 ) {
37
22
match & arg[ ..] {
@@ -83,12 +68,14 @@ fn main() {
83
68
} ;
84
69
assert_eq ! ( output. raw_os_error( ) , Some ( 102 ) ) ;
85
70
86
- let pid = getpid ( ) ;
71
+ let pid = unsafe { libc:: getpid ( ) } ;
72
+ assert ! ( pid >= 0 ) ;
87
73
let output = unsafe {
88
74
Command :: new ( & me)
89
75
. arg ( "empty" )
90
76
. pre_exec ( move || {
91
- let child = getpid ( ) ;
77
+ let child = libc:: getpid ( ) ;
78
+ assert ! ( child >= 0 ) ;
92
79
assert ! ( pid != child) ;
93
80
Ok ( ( ) )
94
81
} )
Original file line number Diff line number Diff line change @@ -23,21 +23,6 @@ use std::sync::atomic::{AtomicU32, Ordering};
23
23
24
24
use libc:: c_int;
25
25
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
-
41
26
/// This stunt allocator allows us to spot heap allocations in the child.
42
27
struct PidChecking < A > {
43
28
parent : A ,
@@ -59,7 +44,7 @@ impl<A> PidChecking<A> {
59
44
fn check ( & self ) {
60
45
let require_pid = self . require_pid . load ( Ordering :: Acquire ) ;
61
46
if require_pid != 0 {
62
- let actual_pid = getpid ( ) ;
47
+ let actual_pid = process :: id ( ) ;
63
48
if require_pid != actual_pid {
64
49
unsafe {
65
50
libc:: raise ( libc:: SIGUSR1 ) ;
You can’t perform that action at this time.
0 commit comments