forkpipe.mx raw

   1  // Copyright 2011 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  //go:build aix || darwin
   6  
   7  package syscall
   8  
   9  // forkExecPipe opens a pipe and non-atomically sets O_CLOEXEC on both file
  10  // descriptors.
  11  func forkExecPipe(p []int) error {
  12  	err := Pipe(p)
  13  	if err != nil {
  14  		return err
  15  	}
  16  	_, err = fcntl(p[0], F_SETFD, FD_CLOEXEC)
  17  	if err != nil {
  18  		return err
  19  	}
  20  	_, err = fcntl(p[1], F_SETFD, FD_CLOEXEC)
  21  	return err
  22  }
  23  
  24  func acquireForkLock() {
  25  	ForkLock.Lock()
  26  }
  27  
  28  func releaseForkLock() {
  29  	ForkLock.Unlock()
  30  }
  31