aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/syscall/libcall_wait4_aix.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/syscall/libcall_wait4_aix.go')
-rw-r--r--libgo/go/syscall/libcall_wait4_aix.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/libgo/go/syscall/libcall_wait4_aix.go b/libgo/go/syscall/libcall_wait4_aix.go
new file mode 100644
index 0000000..9c25d04
--- /dev/null
+++ b/libgo/go/syscall/libcall_wait4_aix.go
@@ -0,0 +1,26 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Handle AIX's wait4 specific behavior
+
+package syscall
+
+//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)
+//wait4(pid Pid_t, status *_C_int, options _C_int, rusage *Rusage) Pid_t
+
+func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
+ var status _C_int
+ var r Pid_t
+ err = ERESTART
+ // AIX wait4 may return with ERESTART errno, while the processus is still
+ // active.
+ for err == ERESTART {
+ r, err = wait4(Pid_t(pid), &status, options, rusage)
+ }
+ wpid = int(r)
+ if wstatus != nil {
+ *wstatus = WaitStatus(status)
+ }
+ return
+}