// Copyright 2020 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.

package testlog

import (
	"sync"
	_ "unsafe" // for linkname
)

// PanicOnExit0 reports whether to panic on a call to os.Exit(0).
// This is in the testlog package because, like other definitions in
// package testlog, it is a hook between the testing package and the
// os package. This is used to ensure that an early call to os.Exit(0)
// does not cause a test to pass.
func PanicOnExit0() bool {
	panicOnExit0.mu.Lock()
	defer panicOnExit0.mu.Unlock()
	return panicOnExit0.val
}

// panicOnExit0 is the flag used for PanicOnExit0. This uses a lock
// because the value can be cleared via a timer call that may race
// with calls to os.Exit
var panicOnExit0 struct {
	mu  sync.Mutex
	val bool
}

// SetPanicOnExit0 sets panicOnExit0 to v.
//
// SetPanicOnExit0 should be an internal detail,
// but alternate implementations of go test in other
// build systems may need to access it using linkname.
//
// Do not remove or change the type signature.
// See go.dev/issue/67401.
//
//go:linkname SetPanicOnExit0
func SetPanicOnExit0(v bool) {
	panicOnExit0.mu.Lock()
	defer panicOnExit0.mu.Unlock()
	panicOnExit0.val = v
}
