1efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen// Copyright 2009 The Go Authors. All rights reserved.
2efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen// Use of this source code is governed by a BSD-style
3efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen// license that can be found in the LICENSE file.
4efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen
5efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen#include "libcgo.h"
6efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen
7efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen/* Stub for creating a new thread */
8efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsenvoid
9efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsenx_cgo_thread_start(ThreadStart *arg)
10efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen{
11efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	ThreadStart *ts;
12efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen
13efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	/* Make our own copy that can persist after we return. */
14efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	_cgo_tsan_acquire();
15efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	ts = malloc(sizeof *ts);
16efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	_cgo_tsan_release();
17efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	if(ts == nil) {
18efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen		fprintf(stderr, "runtime/cgo: out of memory in thread_start\n");
19efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen		abort();
20efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	}
21efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	*ts = *arg;
22efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen
23efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen	_cgo_sys_thread_start(ts);	/* OS-dependent half */
24efea46b87b2dcc66da02dfbf66fd901d24c7a09Dan Willemsen}
25