We don't need sync.Once, we can just select

This commit is contained in:
Asim 2016-05-11 00:01:32 +01:00
parent a0a4ab4c15
commit 2254578760
2 changed files with 9 additions and 13 deletions

View File

@ -75,11 +75,9 @@ func (r *rpcClient) call(ctx context.Context, address string, req Request, resp
return errors.InternalServerError("go.micro.client", fmt.Sprintf("Error sending request: %v", err))
}
var once sync.Once
stream := &rpcStream{
context: ctx,
request: req,
once: once,
closed: make(chan bool),
codec: newRpcPlusCodec(msg, c, cf),
}
@ -139,11 +137,9 @@ func (r *rpcClient) stream(ctx context.Context, address string, req Request, opt
return nil, errors.InternalServerError("go.micro.client", fmt.Sprintf("Error sending request: %v", err))
}
var once sync.Once
stream := &rpcStream{
context: ctx,
request: req,
once: once,
closed: make(chan bool),
codec: newRpcPlusCodec(msg, c, cf),
}

View File

@ -12,7 +12,6 @@ import (
type rpcStream struct {
sync.RWMutex
seq uint64
once sync.Once
closed chan bool
err error
request Request
@ -22,13 +21,11 @@ type rpcStream struct {
func (r *rpcStream) isClosed() bool {
select {
case _, ok := <-r.closed:
if !ok {
return true
}
case <-r.closed:
return true
default:
return false
}
return false
}
func (r *rpcStream) Context() context.Context {
@ -112,8 +109,11 @@ func (r *rpcStream) Error() error {
}
func (r *rpcStream) Close() error {
r.once.Do(func() {
select {
case <-r.closed:
return nil
default:
close(r.closed)
})
return r.codec.Close()
return r.codec.Close()
}
}