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