Server IP : 2a02:4780:11:1359:0:1d43:a566:2 / Your IP : 216.73.216.161 Web Server : LiteSpeed System : Linux in-mum-web1259.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64 User : u490972518 ( 490972518) PHP Version : 5.6.40 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : ON | cURL : ON | WGET : ON | Perl : OFF | Python : OFF Directory (0755) : /home/../opt/cloudlinux-linksafe/../golang/1.19.4/src/runtime/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
// Copyright 2015 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. package runtime_test import ( "runtime" "sync" "testing" ) type response struct { } type myError struct { } func (myError) Error() string { return "" } func doRequest(useSelect bool) (*response, error) { type async struct { resp *response err error } ch := make(chan *async, 0) done := make(chan struct{}, 0) if useSelect { go func() { select { case ch <- &async{resp: nil, err: myError{}}: case <-done: } }() } else { go func() { ch <- &async{resp: nil, err: myError{}} }() } r := <-ch runtime.Gosched() return r.resp, r.err } func TestChanSendSelectBarrier(t *testing.T) { testChanSendBarrier(true) } func TestChanSendBarrier(t *testing.T) { testChanSendBarrier(false) } func testChanSendBarrier(useSelect bool) { var wg sync.WaitGroup var globalMu sync.Mutex outer := 100 inner := 100000 if testing.Short() || runtime.GOARCH == "wasm" { outer = 10 inner = 1000 } for i := 0; i < outer; i++ { wg.Add(1) go func() { defer wg.Done() var garbage []byte for j := 0; j < inner; j++ { _, err := doRequest(useSelect) _, ok := err.(myError) if !ok { panic(1) } garbage = make([]byte, 1<<10) } globalMu.Lock() global = garbage globalMu.Unlock() }() } wg.Wait() }