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

// This file implements runtime support for signal handling.

package runtime

func signal_recv() (m uint32) {
	for {
		mp := acquirem()
		onM(&signal_recv_m)
		ok := mp.scalararg[0] != 0
		m = uint32(mp.scalararg[1])
		releasem(mp)
		if ok {
			return
		}
		gonotetsleepg(&signote, -1)
		gonoteclear(&signote)
	}
}

func signal_enable(s uint32) {
	mp := acquirem()
	mp.scalararg[0] = uint(s)
	onM(&signal_enable_m)
	releasem(mp)
}

func signal_disable(s uint32) {
	mp := acquirem()
	mp.scalararg[0] = uint(s)
	onM(&signal_disable_m)
	releasem(mp)
}

var (
	signal_recv_m,
	signal_enable_m,
	signal_disable_m mFunction
)
