mirror of
https://github.com/golang/go
synced 2024-11-18 18:54:42 -07:00
internal/jsonrpc2: add some extra comments
Change-Id: I31531f32a88a02acf82814ab4ea151e54fd6d0fc Reviewed-on: https://go-review.googlesource.com/c/tools/+/184037 Reviewed-by: Rebecca Stambler <rstambler@golang.org>
This commit is contained in:
parent
94c5763a7c
commit
85b1a4bcd4
@ -300,6 +300,8 @@ func (r *Request) Parallel() {
|
|||||||
// You must call this exactly once for any given request.
|
// You must call this exactly once for any given request.
|
||||||
// It should only be called from the handler go routine.
|
// It should only be called from the handler go routine.
|
||||||
// If err is set then result will be ignored.
|
// If err is set then result will be ignored.
|
||||||
|
// If the request has not yet dropped into parallel mode
|
||||||
|
// it will be before this function returns.
|
||||||
func (r *Request) Reply(ctx context.Context, result interface{}, err error) error {
|
func (r *Request) Reply(ctx context.Context, result interface{}, err error) error {
|
||||||
if r.state >= requestReplied {
|
if r.state >= requestReplied {
|
||||||
return fmt.Errorf("reply invoked more than once")
|
return fmt.Errorf("reply invoked more than once")
|
||||||
@ -310,6 +312,10 @@ func (r *Request) Reply(ctx context.Context, result interface{}, err error) erro
|
|||||||
ctx, st := trace.StartSpan(ctx, r.Method+":reply", trace.WithSpanKind(trace.SpanKindClient))
|
ctx, st := trace.StartSpan(ctx, r.Method+":reply", trace.WithSpanKind(trace.SpanKindClient))
|
||||||
defer st.End()
|
defer st.End()
|
||||||
|
|
||||||
|
// reply ends the handling phase of a call, so if we are not yet
|
||||||
|
// parallel we should be now. The go routine is allowed to continue
|
||||||
|
// to do work after replying, which is why it is important to unlock
|
||||||
|
// the rpc system at this point.
|
||||||
r.Parallel()
|
r.Parallel()
|
||||||
r.state = requestReplied
|
r.state = requestReplied
|
||||||
|
|
||||||
@ -380,6 +386,9 @@ type combined struct {
|
|||||||
// It must be called exactly once for each Conn.
|
// It must be called exactly once for each Conn.
|
||||||
// It returns only when the reader is closed or there is an error in the stream.
|
// It returns only when the reader is closed or there is an error in the stream.
|
||||||
func (c *Conn) Run(ctx context.Context) error {
|
func (c *Conn) Run(ctx context.Context) error {
|
||||||
|
// we need to make the next request "lock" in an unlocked state to allow
|
||||||
|
// the first incoming request to proceed. All later requests are unlocked
|
||||||
|
// by the preceding request going to parallel mode.
|
||||||
nextRequest := make(chan struct{})
|
nextRequest := make(chan struct{})
|
||||||
close(nextRequest)
|
close(nextRequest)
|
||||||
for {
|
for {
|
||||||
|
Loading…
Reference in New Issue
Block a user