|  | // run | 
|  |  | 
|  | // Copyright 2013 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. | 
|  |  | 
|  | // Used to die in runtime due to init goroutine exiting while | 
|  | // locked to main thread. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import ( | 
|  | "os" | 
|  | "runtime" | 
|  | ) | 
|  |  | 
|  | func init() { | 
|  | c := make(chan int, 1) | 
|  | defer func() { | 
|  | c <- 0 | 
|  | }() | 
|  | go func() { | 
|  | os.Exit(<-c) | 
|  | }() | 
|  | runtime.Goexit() | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | } | 
|  |  | 
|  | /* Before fix: | 
|  |  | 
|  | invalid m->locked = 2 | 
|  | fatal error: internal lockOSThread error | 
|  |  | 
|  | goroutine 2 [runnable]: | 
|  | runtime.MHeap_Scavenger() | 
|  | /Users/rsc/g/go/src/pkg/runtime/mheap.c:438 | 
|  | runtime.goexit() | 
|  | /Users/rsc/g/go/src/pkg/runtime/proc.c:1313 | 
|  | created by runtime.main | 
|  | /Users/rsc/g/go/src/pkg/runtime/proc.c:165 | 
|  |  | 
|  | goroutine 3 [runnable]: | 
|  | main.funcĀ·002() | 
|  | /Users/rsc/g/go/test/fixedbugs/issue5963.go:22 | 
|  | created by main.initĀ·1 | 
|  | /Users/rsc/g/go/test/fixedbugs/issue5963.go:24 +0xb9 | 
|  | exit status 2 | 
|  | */ |