36 lines
736 B
Go
36 lines
736 B
Go
|
package tcp
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
type resultPipesMU struct {
|
||
|
l sync.Mutex
|
||
|
fdResultPipes map[int]chan error
|
||
|
}
|
||
|
|
||
|
func newResultPipesMU() *resultPipesMU {
|
||
|
return &resultPipesMU{fdResultPipes: make(map[int]chan error)}
|
||
|
}
|
||
|
|
||
|
func (r *resultPipesMU) popResultPipe(fd int) (chan error, bool) {
|
||
|
r.l.Lock()
|
||
|
p, exists := r.fdResultPipes[fd]
|
||
|
if exists {
|
||
|
delete(r.fdResultPipes, fd)
|
||
|
}
|
||
|
r.l.Unlock()
|
||
|
return p, exists
|
||
|
}
|
||
|
|
||
|
func (r *resultPipesMU) deregisterResultPipe(fd int) {
|
||
|
r.l.Lock()
|
||
|
delete(r.fdResultPipes, fd)
|
||
|
r.l.Unlock()
|
||
|
}
|
||
|
|
||
|
func (r *resultPipesMU) registerResultPipe(fd int, pipe chan error) {
|
||
|
// NOTE: the pipe should have been put back if c.fdResultPipes[fd] exists.
|
||
|
r.l.Lock()
|
||
|
r.fdResultPipes[fd] = pipe
|
||
|
r.l.Unlock()
|
||
|
}
|