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

// +build !plan9,!windows

// Test that a sequence of callbacks from C to Go get the same m.
// This failed to be true on arm and arm64, which was the root cause
// of issue 13881.

package main

/*
#include <stddef.h>
#include <pthread.h>

extern void GoCheckM();

static void* thread(void* arg __attribute__ ((unused))) {
	GoCheckM();
	return NULL;
}

static void CheckM() {
	pthread_t tid;
	pthread_create(&tid, NULL, thread, NULL);
	pthread_join(tid, NULL);
	pthread_create(&tid, NULL, thread, NULL);
	pthread_join(tid, NULL);
}
*/
import "C"

import (
	"fmt"
	"os"
)

func init() {
	register("EnsureDropM", EnsureDropM)
}

var savedM uintptr

//export GoCheckM
func GoCheckM() {
	m := runtime_getm_for_test()
	if savedM == 0 {
		savedM = m
	} else if savedM != m {
		fmt.Printf("m == %x want %x\n", m, savedM)
		os.Exit(1)
	}
}

func EnsureDropM() {
	C.CheckM()
	fmt.Println("OK")
}
