func TestSandboxCreateTwice(t *testing.T) { defer SetupTestOSContext(t)() key, err := newKey(t) if err != nil { t.Fatalf("Failed to obtain a key: %v", err) } _, err = NewSandbox(key, true) if err != nil { t.Fatalf("Failed to create a new sandbox: %v", err) } runtime.LockOSThread() // Create another sandbox with the same key to see if we handle it // gracefully. s, err := NewSandbox(key, true) if err != nil { t.Fatalf("Failed to create a new sandbox: %v", err) } runtime.LockOSThread() err = s.Destroy() if err != nil { t.Fatal(err) } GC() verifyCleanup(t, s, false) }
func TestRef(t *testing.T) { const N = 10 runtime.LockOSThread() wg := sync.WaitGroup{} wg.Add(N) ch := make(chan uintptr) for i := 0; i < N; i++ { go func() { runtime.LockOSThread() wg.Done() ch <- Ref() wg.Wait() }() } wg.Wait() refs := []uintptr{Ref()} for i := 0; i < N; i++ { chref := <-ch for _, ref := range refs { if chref == ref { t.Fatalf("found duplicated ref: %d == %d", chref, ref) } } refs = append(refs, chref) } }
func Init() { runtime.LockOSThread() err := glfw.Init() if err != nil { panic(fmt.Sprintf("glfw.Init() fails: %v", err)) } glfw.WindowHint(glfw.Visible, glfw.False) glfw.WindowHint(glfw.Resizable, glfw.False) // As start, create an window with temporary size to create OpenGL context thread. window, err := glfw.CreateWindow(16, 16, "", nil, nil) if err != nil { panic(err) } u := &userInterface{ window: window, funcs: make(chan func()), } go func() { runtime.LockOSThread() u.window.MakeContextCurrent() glfw.SwapInterval(1) for f := range u.funcs { f() } }() currentUI = u }
func TestRef(t *testing.T) { const N = 10 runtime.LockOSThread() exit := sync.WaitGroup{} exit.Add(1) defer exit.Done() wg := sync.WaitGroup{} wg.Add(N) ch := make(chan refPair) for i := 0; i < N; i++ { go func() { runtime.LockOSThread() wg.Done() ch <- refPair{Ref(), Ref()} exit.Wait() }() } wg.Wait() refs := make(map[uintptr]bool) for i := 0; i < N; i++ { pair := <-ch if pair.ref1 != pair.ref2 { t.Fatalf("found inconsistent ref: %d != %d", pair.ref1, pair.ref2) } if refs[pair.ref1] { t.Fatalf("found duplicated ref: %d", pair.ref1) } refs[pair.ref1] = true } }
func TestEndpointDeleteWithActiveContainer(t *testing.T) { if !netutils.IsRunningInContainer() { defer netutils.SetupTestNetNS(t)() } n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{ netlabel.GenericData: options.Generic{ "BridgeName": "testnetwork", "AllowNonDefaultBridge": true, }, }) if err != nil { t.Fatal(err) } defer func() { if err := n.Delete(); err != nil { t.Fatal(err) } }() ep, err := n.CreateEndpoint("ep1") if err != nil { t.Fatal(err) } defer func() { err = ep.Delete() if err != nil { t.Fatal(err) } }() defer controller.LeaveAll(containerID) err = ep.Join(containerID, libnetwork.JoinOptionHostname("test"), libnetwork.JoinOptionDomainname("docker.io"), libnetwork.JoinOptionExtraHost("web", "192.168.0.1")) runtime.LockOSThread() if err != nil { t.Fatal(err) } defer func() { err = ep.Leave(containerID) runtime.LockOSThread() if err != nil { t.Fatal(err) } }() err = ep.Delete() if err == nil { t.Fatal("Expected to fail. But instead succeeded") } if _, ok := err.(*libnetwork.ActiveContainerError); !ok { t.Fatalf("Did not fail with expected error. Actual error: %v", err) } }
func TestEndpointMultipleJoins(t *testing.T) { if !netutils.IsRunningInContainer() { defer netutils.SetupTestNetNS(t)() } n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{ netlabel.GenericData: options.Generic{ "BridgeName": "testnetwork", "AllowNonDefaultBridge": true, }, }) if err != nil { t.Fatal(err) } defer func() { if err := n.Delete(); err != nil { t.Fatal(err) } }() ep, err := n.CreateEndpoint("ep1") if err != nil { t.Fatal(err) } defer func() { if err := ep.Delete(); err != nil { t.Fatal(err) } }() defer controller.LeaveAll(containerID) err = ep.Join(containerID, libnetwork.JoinOptionHostname("test"), libnetwork.JoinOptionDomainname("docker.io"), libnetwork.JoinOptionExtraHost("web", "192.168.0.1")) runtime.LockOSThread() if err != nil { t.Fatal(err) } defer func() { err = ep.Leave(containerID) runtime.LockOSThread() if err != nil { t.Fatal(err) } }() err = ep.Join("container2") if err == nil { t.Fatal("Expected to fail multiple joins for the same endpoint") } if _, ok := err.(libnetwork.ErrInvalidJoin); !ok { t.Fatalf("Failed for unexpected reason: %v", err) } }
//export GoRun func GoRun() { runtime.LockOSThread() c := make(chan bool) go func() { runtime.LockOSThread() C.setVal(2) c <- true }() <-c }
func TestSandboxCreate(t *testing.T) { defer SetupTestOSContext(t)() key, err := newKey(t) if err != nil { t.Fatalf("Failed to obtain a key: %v", err) } s, err := NewSandbox(key, true) if err != nil { t.Fatalf("Failed to create a new sandbox: %v", err) } runtime.LockOSThread() if s.Key() != key { t.Fatalf("s.Key() returned %s. Expected %s", s.Key(), key) } tbox, err := newInfo(t) if err != nil { t.Fatalf("Failed to generate new sandbox info: %v", err) } for _, i := range tbox.Info().Interfaces() { err = s.AddInterface(i.SrcName(), i.DstName(), tbox.InterfaceOptions().Bridge(i.Bridge()), tbox.InterfaceOptions().Address(i.Address()), tbox.InterfaceOptions().AddressIPv6(i.AddressIPv6())) if err != nil { t.Fatalf("Failed to add interfaces to sandbox: %v", err) } runtime.LockOSThread() } err = s.SetGateway(tbox.Info().Gateway()) if err != nil { t.Fatalf("Failed to set gateway to sandbox: %v", err) } runtime.LockOSThread() err = s.SetGatewayIPv6(tbox.Info().GatewayIPv6()) if err != nil { t.Fatalf("Failed to set ipv6 gateway to sandbox: %v", err) } runtime.LockOSThread() verifySandbox(t, s, []string{"0", "1", "2"}) runtime.LockOSThread() err = s.Destroy() if err != nil { t.Fatal(err) } verifyCleanup(t, s, true) }
func TestLeaveAll(t *testing.T) { if !testutils.IsRunningInContainer() { defer testutils.SetupTestOSContext(t)() } n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{ netlabel.GenericData: options.Generic{ "BridgeName": "testnetwork", }, }, nil, nil) if err != nil { t.Fatal(err) } defer func() { // If this goes through, it means cnt.Delete() effectively detached from all the endpoints if err := n.Delete(); err != nil { t.Fatal(err) } }() ep1, err := n.CreateEndpoint("ep1") if err != nil { t.Fatal(err) } ep2, err := n.CreateEndpoint("ep2") if err != nil { t.Fatal(err) } cnt, err := controller.NewSandbox("leaveall") if err != nil { t.Fatal(err) } err = ep1.Join(cnt) if err != nil { t.Fatalf("Failed to join ep1: %v", err) } runtime.LockOSThread() err = ep2.Join(cnt) if err != nil { t.Fatalf("Failed to join ep2: %v", err) } runtime.LockOSThread() err = cnt.Delete() if err != nil { t.Fatal(err) } }
func CgoSignalDeadlock() { runtime.GOMAXPROCS(100) ping := make(chan bool) go func() { for i := 0; ; i++ { runtime.Gosched() select { case done := <-ping: if done { ping <- true return } ping <- true default: } func() { defer func() { recover() }() var s *string *s = "" }() } }() time.Sleep(time.Millisecond) for i := 0; i < 64; i++ { go func() { runtime.LockOSThread() select {} }() go func() { runtime.LockOSThread() select {} }() time.Sleep(time.Millisecond) ping <- false select { case <-ping: case <-time.After(time.Second): fmt.Printf("HANG\n") return } } ping <- true select { case <-ping: case <-time.After(time.Second): fmt.Printf("HANG\n") return } fmt.Printf("OK\n") }
func main() { runtime.LockOSThread() // initialize glfw if err := glfw.Init(); err != nil { log.Fatalln("Failed to initialize GLFW: ", err) } defer glfw.Terminate() // create window window, err := glfw.CreateWindow(1280, 720, os.Args[0], nil, nil) if err != nil { log.Fatal(err) } window.SetFramebufferSizeCallback(onResize) window.MakeContextCurrent() if err := gl.Init(); err != nil { log.Fatal(err) } // set up opengl context onResize(window, 600, 600) // player = createPlayer() // addBall() // set up physics game = engine.NewGame() game.Init() game.ReadLevelFromFile("level.json") //Init Controlls I think // glfw.KeyCallback(window) window.SetKeyCallback(keyCallback) runtime.LockOSThread() glfw.SwapInterval(1) ticker := time.NewTicker(time.Second / 60) for !window.ShouldClose() { game.Update(1.0 / 60.0) draw() window.SwapBuffers() glfw.PollEvents() <-ticker.C // wait up to 1/60th of a second } }
func init() { if DoItTheRightWay { runtime.LockOSThread() } C.initMacDraw() if !DoItTheRightWay { go func() { runtime.LockOSThread() <-appChanStart C.NSAppRun() appChanFinish <- true }() } }
func main() { runtime.LockOSThread() C.setVal(1) c := make(chan bool) go func() { runtime.LockOSThread() C.setVal(2) c <- true }() <-c if v := C.getVal(); v != 2 { panic(v) } }
func Clone(url string, path string, options *CloneOptions) (*Repository, error) { repo := new(Repository) curl := C.CString(url) defer C.free(unsafe.Pointer(curl)) cpath := C.CString(path) defer C.free(unsafe.Pointer(cpath)) var copts C.git_clone_options populateCloneOptions(&copts, options) defer freeCheckoutOpts(&copts.checkout_opts) if len(options.CheckoutBranch) != 0 { copts.checkout_branch = C.CString(options.CheckoutBranch) defer C.free(unsafe.Pointer(copts.checkout_branch)) } runtime.LockOSThread() defer runtime.UnlockOSThread() ret := C.git_clone(&repo.ptr, curl, cpath, &copts) if ret < 0 { return nil, MakeGitError(ret) } runtime.SetFinalizer(repo, (*Repository).Free) return repo, nil }
func (v *Reference) SetSymbolicTarget(target string, sig *Signature, msg string) (*Reference, error) { var ptr *C.git_reference ctarget := C.CString(target) defer C.free(unsafe.Pointer(ctarget)) runtime.LockOSThread() defer runtime.UnlockOSThread() csig := sig.toC() defer C.free(unsafe.Pointer(csig)) var cmsg *C.char if msg == "" { cmsg = nil } else { cmsg = C.CString(msg) defer C.free(unsafe.Pointer(cmsg)) } ret := C.git_reference_symbolic_set_target(&ptr, v.ptr, ctarget, csig, cmsg) if ret < 0 { return nil, MakeGitError(ret) } return newReferenceFromC(ptr), nil }
func lolwut() { runtime.LockOSThread() var stream unsafe.Pointer err := C.Pa_OpenDefaultStream(&stream, 0, // no input 1, // mono C.paFloat32, // 32-bit floating point 48000, C.paFramesPerBufferUnspecified, nil, nil) if err != C.paNoError { panic(C.GoString(C.Pa_GetErrorText(err))) } err = C.Pa_StartStream(stream) if err != C.paNoError { panic(C.GoString(C.Pa_GetErrorText(err))) } for { err := C.Pa_WriteStream(stream, unsafe.Pointer(&genSine(440)[0]), 48000) if err != C.paNoError { panic(C.GoString(C.Pa_GetErrorText(err))) } } }
func Crash() { runtime.LockOSThread() test("main") testInNewThread("new-thread") testInNewThread("second-new-thread") test("main-again") }
func (b *Branch) Move(newBranchName string, force bool, signature *Signature, msg string) (*Branch, error) { var ptr *C.git_reference cNewBranchName := C.CString(newBranchName) cForce := cbool(force) cSignature, err := signature.toC() if err != nil { return nil, err } defer C.git_signature_free(cSignature) var cmsg *C.char if msg == "" { cmsg = nil } else { cmsg = C.CString(msg) defer C.free(unsafe.Pointer(cmsg)) } runtime.LockOSThread() defer runtime.UnlockOSThread() ret := C.git_branch_move(&ptr, b.Reference.ptr, cNewBranchName, cForce, cSignature, cmsg) if ret < 0 { return nil, MakeGitError(ret) } return newReferenceFromC(ptr, b.repo).Branch(), nil }
func (repo *Repository) CreateBranch(branchName string, target *Commit, force bool, signature *Signature, msg string) (*Branch, error) { ref := new(Reference) cBranchName := C.CString(branchName) cForce := cbool(force) cSignature, err := signature.toC() if err != nil { return nil, err } defer C.git_signature_free(cSignature) var cmsg *C.char if msg == "" { cmsg = nil } else { cmsg = C.CString(msg) defer C.free(unsafe.Pointer(cmsg)) } runtime.LockOSThread() defer runtime.UnlockOSThread() ret := C.git_branch_create(&ref.ptr, repo.ptr, cBranchName, target.cast_ptr, cForce, cSignature, cmsg) if ret < 0 { return nil, MakeGitError(ret) } return ref.Branch(), nil }
// Locks to an OS thread and initializes CUDA for that thread. func Init(gpu int) { if cudaCtx != 0 { return // needed for tests } runtime.LockOSThread() tryCuInit() dev := cu.Device(gpu) cudaCtx = cu.CtxCreate(cu.CTX_SCHED_YIELD, dev) cudaCtx.SetCurrent() M, m := dev.ComputeCapability() cudaCC = 10*M + m Version = cu.Version() DevName = dev.Name() TotalMem = dev.TotalMem() GPUInfo = fmt.Sprint("CUDA ", Version, " ", DevName, "(", (TotalMem)/(1024*1024), "MB) ", "cc", M, ".", m) if M < 2 { log.Fatalln("GPU has insufficient compute capability, need 2.0 or higher.") } if Synchronous { log.Println("DEBUG: synchronized CUDA calls") } // test PTX load so that we can catch CUDA_ERROR_NO_BINARY_FOR_GPU early fatbinLoad(madd2_map, "madd2") }
func TestView_Wait(t *testing.T) { runtime.LockOSThread() setup() defer teardown() view := ctx.NewView() defer view.Close() loaded := false mux.HandleFunc("/abc", func(w http.ResponseWriter, _ *http.Request) { w.Write([]byte("abc")) loaded = true }) url := server.URL + "/abc" view.Open(server.URL + "/abc") view.Wait() if gotURI := view.URI(); url != gotURI { t.Errorf("want URI %q, got %q", url, gotURI) } if !loaded { t.Error("!loaded") } }
func (v *Reference) Rename(name string, force bool, sig *Signature, msg string) (*Reference, error) { var ptr *C.git_reference cname := C.CString(name) defer C.free(unsafe.Pointer(cname)) csig := sig.toC() defer C.free(unsafe.Pointer(csig)) var cmsg *C.char if msg == "" { cmsg = nil } else { cmsg = C.CString(msg) defer C.free(unsafe.Pointer(cmsg)) } runtime.LockOSThread() defer runtime.UnlockOSThread() ret := C.git_reference_rename(&ptr, v.ptr, cname, cbool(force), csig, cmsg) if ret < 0 { return nil, MakeGitError(ret) } return newReferenceFromC(ptr), nil }
func checkSandbox(t *testing.T, info libnetwork.EndpointInfo) { origns, err := netns.Get() if err != nil { t.Fatalf("Could not get the current netns: %v", err) } defer origns.Close() key := info.Sandbox().Key() f, err := os.OpenFile(key, os.O_RDONLY, 0) if err != nil { t.Fatalf("Failed to open network namespace path %q: %v", key, err) } defer f.Close() runtime.LockOSThread() defer runtime.UnlockOSThread() nsFD := f.Fd() if err = netns.Set(netns.NsHandle(nsFD)); err != nil { t.Fatalf("Setting to the namespace pointed to by the sandbox %s failed: %v", key, err) } defer netns.Set(origns) _, err = netlink.LinkByName("eth0") if err != nil { t.Fatalf("Could not find the interface eth0 inside the sandbox: %v", err) } _, err = netlink.LinkByName("eth1") if err != nil { t.Fatalf("Could not find the interface eth1 inside the sandbox: %v", err) } }
func main() { runtime.LockOSThread() if srpc.Enabled() { go srpc.ServeRuntime() } w, err := av.Init(av.SubsystemVideo, 512, 512) if err != nil { log.Exitf("av.Init: %s", err) } go quitter(w.QuitChan()) var m SpacewarPDP1 m.Init(w) m.PC = 4 f := bytes.NewBuffer(strings.Bytes(spacewarCode)) if err = m.Load(f); err != nil { log.Exitf("loading %s: %s", "spacewar.lst", err) } for err == nil { //fmt.Printf("step PC=%06o ", m.PC); //fmt.Printf("inst=%06o AC=%06o IO=%06o OV=%o\n", // m.Mem[m.PC], m.AC, m.IO, m.OV); err = m.Step() } log.Exitf("step: %s", err) }
func verifySandbox(t *testing.T, s Sandbox, ifaceSuffixes []string) { _, ok := s.(*networkNamespace) if !ok { t.Fatalf("The sandox interface returned is not of type networkNamespace") } origns, err := netns.Get() if err != nil { t.Fatalf("Could not get the current netns: %v", err) } defer origns.Close() f, err := os.OpenFile(s.Key(), os.O_RDONLY, 0) if err != nil { t.Fatalf("Failed top open network namespace path %q: %v", s.Key(), err) } defer f.Close() runtime.LockOSThread() defer runtime.UnlockOSThread() nsFD := f.Fd() if err = netns.Set(netns.NsHandle(nsFD)); err != nil { t.Fatalf("Setting to the namespace pointed to by the sandbox %s failed: %v", s.Key(), err) } defer netns.Set(origns) for _, suffix := range ifaceSuffixes { _, err = netlink.LinkByName(sboxIfaceName + suffix) if err != nil { t.Fatalf("Could not find the interface %s inside the sandbox: %v", sboxIfaceName+suffix, err) } } }
func TestGetNewSetDelete(t *testing.T) { runtime.LockOSThread() defer runtime.UnlockOSThread() origns, err := Get() if err != nil { t.Fatal(err) } newns, err := New() if err != nil { t.Fatal(err) } if origns.Equal(newns) { t.Fatal("New ns failed") } if err := Set(origns); err != nil { t.Fatal(err) } newns.Close() if newns.IsOpen() { t.Fatal("newns still open after close", newns) } ns, err := Get() if err != nil { t.Fatal(err) } if !ns.Equal(origns) { t.Fatal("Reset ns failed", origns, newns, ns) } }
func parallelLeave(t *testing.T, rc libnetwork.Sandbox, ep libnetwork.Endpoint, thrNumber int) { debugf("L%d.", thrNumber) var err error cid := fmt.Sprintf("%drace", thrNumber) sb := sboxes[thrNumber-1] if thrNumber == first { err = ep.Leave(sb) } else { err = sb.Delete() // re add sandbox defer func() { if err == nil { var e error if sboxes[thrNumber-1], e = controller.NewSandbox(cid); e != nil { t.Fatalf("Failed to recreate sandbox %s: %v", cid, e) } } }() } runtime.LockOSThread() if err != nil { if _, ok := err.(types.ForbiddenError); !ok { t.Fatalf("thread %d: %v", thrNumber, err) } debugf("LE%d(%v).", thrNumber, err) } debugf("LD%d.", thrNumber) }
func main(f func(App)) { runtime.LockOSThread() C.createWindow() // TODO: send lifecycle events when e.g. the X11 window is iconified or moved off-screen. sendLifecycle(lifecycle.StageFocused) donec := make(chan struct{}) go func() { f(app{}) close(donec) }() // TODO: can we get the actual vsync signal? ticker := time.NewTicker(time.Second / 60) defer ticker.Stop() tc := ticker.C for { select { case <-donec: return case <-gl.WorkAvailable: gl.DoWork() case <-endPaint: C.swapBuffers() tc = ticker.C case <-tc: tc = nil eventsIn <- paint.Event{} } C.processEvents() } }
func scannerDaemon(rootDirectoryName string, cacheDirectoryName string, configuration *Configuration, fsChannel chan<- *FileSystem, logger *log.Logger) { runtime.LockOSThread() loweredPriority := false var oldFS FileSystem for { fs, err := scanFileSystem(rootDirectoryName, cacheDirectoryName, configuration, &oldFS) if err != nil { if err.Error() == "DisableScan" { disableScanAcknowledge <- true <-disableScanAcknowledge continue } logger.Printf("Error scanning: %s\n", err) } else { oldFS.InodeTable = fs.InodeTable oldFS.DirectoryInode = fs.DirectoryInode fsChannel <- fs runtime.GC() if !loweredPriority { syscall.Setpriority(syscall.PRIO_PROCESS, 0, 15) loweredPriority = true } } } }
func init() { gtk.Init(nil) go func() { runtime.LockOSThread() gtk.Main() }() }