mirror of
https://github.com/golang/go
synced 2024-11-19 00:54:42 -07:00
fee9e47559
The conversion was done with an automated tool and then modified only as necessary to make it compile and run. [This CL is part of the removal of C code from package runtime. See golang.org/s/dev.cc for an overview.] LGTM=r R=r, austin CC=dvyukov, golang-codereviews, iant, khr https://golang.org/cl/167550043
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
// Copyright 2009 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
|
|
|
|
import "unsafe"
|
|
|
|
//#define MAXALIGN 8
|
|
|
|
type waitq struct {
|
|
first *sudog
|
|
last *sudog
|
|
}
|
|
|
|
type hchan struct {
|
|
qcount uint // total data in the q
|
|
dataqsiz uint // size of the circular q
|
|
buf *byte
|
|
elemsize uint16
|
|
closed uint32
|
|
elemtype *_type // element type
|
|
sendx uint // send index
|
|
recvx uint // receive index
|
|
recvq waitq // list of recv waiters
|
|
sendq waitq // list of send waiters
|
|
lock mutex
|
|
}
|
|
|
|
// Buffer follows Hchan immediately in memory.
|
|
// chanbuf(c, i) is pointer to the i'th slot in the buffer.
|
|
// #define chanbuf(c, i) ((byte*)((c)->buf)+(uintptr)(c)->elemsize*(i))
|
|
|
|
const (
|
|
// scase.kind
|
|
_CaseRecv = iota
|
|
_CaseSend
|
|
_CaseDefault
|
|
)
|
|
|
|
// Known to compiler.
|
|
// Changes here must also be made in src/cmd/gc/select.c's selecttype.
|
|
type scase struct {
|
|
elem unsafe.Pointer // data element
|
|
_chan *hchan // chan
|
|
pc uintptr // return pc
|
|
kind uint16
|
|
so uint16 // vararg of selected bool
|
|
receivedp *bool // pointer to received bool (recv2)
|
|
releasetime int64
|
|
}
|
|
|
|
// Known to compiler.
|
|
// Changes here must also be made in src/cmd/gc/select.c's selecttype.
|
|
type _select struct {
|
|
tcase uint16 // total count of scase[]
|
|
ncase uint16 // currently filled scase[]
|
|
pollorder *uint16 // case poll order
|
|
lockorder **hchan // channel lock order
|
|
scase [1]scase // one per case (in order of appearance)
|
|
}
|