// +build linux

package emulators

import "syscall"

// makeSysProcAttrWithPdeathsigSIGKILL returns a syscall.SysProcAttr struct such that any emulators
// started via an exec.Cmd will be killed as soon as the parent process (e.g. a Go test) dies.
//
// This function uses a Linux-only field of the syscall.SysProcAttr struct. Trying to compile this
// file for a non-Linux target will result in the following compilation error:
//
//     unknown field 'Pdeathsig' in struct literal of type syscall.SysProcAttr
//
// For this reason, this file is annotated with a "+build linux" build tag, which will exclude it
// from compilation for non-Linux targets. A separate, noop implementation for all other compilation
// targets is provided in a sibling file, so as not to break the build.
//
// See https://golang.org/cmd/go/#hdr-Build_constraints for more information on build tags.
func makeSysProcAttrWithPdeathsigSIGKILL() *syscall.SysProcAttr {
	return &syscall.SysProcAttr{
		// Under Bazel and RBE, emulators are launched by each individual go_test Bazel target. The
		// below setting kills the emulator processes (and any other child processes) as soon as the
		// parent process (i.e. the test runner) dies.
		//
		// If we don't do this, the emulators will continue running indefinitely, and Bazel will
		// eventually time out while waiting for these child processes to die.
		//
		// This setting is Linux-only, but that's OK because our RBE instance consists of Linux
		// machines exclusively. Alternative approaches include adding a TestMain function to our
		// emulator tests that launches the emulators before running the test cases and kills them
		// afterwards, or leveraging the test_on_env Bazel macro to run an environment binary
		// alongside the tests which controls the emulators' lifecycle. Any of these approaches would
		// work on non-Linux OSes as well.
		Pdeathsig: syscall.SIGKILL,
	}
}
