diff --git a/common/net/deadline/conn.go b/common/net/deadline/conn.go index 03ee7f6a..01519e94 100644 --- a/common/net/deadline/conn.go +++ b/common/net/deadline/conn.go @@ -20,7 +20,7 @@ type connReadResult struct { type Conn struct { network.ExtendedConn deadline atomic.TypedValue[time.Time] - pipeDeadline pipeDeadline + pipeDeadline PipeDeadline disablePipe atomic.Bool inRead atomic.Bool resultCh chan *connReadResult @@ -34,7 +34,7 @@ func IsConn(conn any) bool { func NewConn(conn net.Conn) *Conn { c := &Conn{ ExtendedConn: bufio.NewExtendedConn(conn), - pipeDeadline: makePipeDeadline(), + pipeDeadline: MakePipeDeadline(), resultCh: make(chan *connReadResult, 1), } c.resultCh <- nil @@ -58,7 +58,7 @@ func (c *Conn) Read(p []byte) (n int, err error) { c.resultCh <- nil break } - case <-c.pipeDeadline.wait(): + case <-c.pipeDeadline.Wait(): return 0, os.ErrDeadlineExceeded } @@ -104,7 +104,7 @@ func (c *Conn) ReadBuffer(buffer *buf.Buffer) (err error) { c.resultCh <- nil break } - case <-c.pipeDeadline.wait(): + case <-c.pipeDeadline.Wait(): return os.ErrDeadlineExceeded } @@ -130,7 +130,7 @@ func (c *Conn) SetReadDeadline(t time.Time) error { return c.ExtendedConn.SetReadDeadline(t) } c.deadline.Store(t) - c.pipeDeadline.set(t) + c.pipeDeadline.Set(t) return nil } diff --git a/common/net/deadline/packet.go b/common/net/deadline/packet.go index 67043198..c4cbca95 100644 --- a/common/net/deadline/packet.go +++ b/common/net/deadline/packet.go @@ -19,7 +19,7 @@ type readResult struct { type NetPacketConn struct { net.PacketConn deadline atomic.TypedValue[time.Time] - pipeDeadline pipeDeadline + pipeDeadline PipeDeadline disablePipe atomic.Bool inRead atomic.Bool resultCh chan any @@ -28,7 +28,7 @@ type NetPacketConn struct { func NewNetPacketConn(pc net.PacketConn) net.PacketConn { npc := &NetPacketConn{ PacketConn: pc, - pipeDeadline: makePipeDeadline(), + pipeDeadline: MakePipeDeadline(), resultCh: make(chan any, 1), } npc.resultCh <- nil @@ -83,7 +83,7 @@ FOR: c.resultCh <- nil break FOR } - case <-c.pipeDeadline.wait(): + case <-c.pipeDeadline.Wait(): return 0, nil, os.ErrDeadlineExceeded } } @@ -122,7 +122,7 @@ func (c *NetPacketConn) SetReadDeadline(t time.Time) error { return c.PacketConn.SetReadDeadline(t) } c.deadline.Store(t) - c.pipeDeadline.set(t) + c.pipeDeadline.Set(t) return nil } diff --git a/common/net/deadline/packet_enhance.go b/common/net/deadline/packet_enhance.go index 3e314fb8..0a6c8457 100644 --- a/common/net/deadline/packet_enhance.go +++ b/common/net/deadline/packet_enhance.go @@ -52,7 +52,7 @@ FOR: c.netPacketConn.resultCh <- nil break FOR } - case <-c.netPacketConn.pipeDeadline.wait(): + case <-c.netPacketConn.pipeDeadline.Wait(): return nil, nil, nil, os.ErrDeadlineExceeded } } diff --git a/common/net/deadline/packet_sing.go b/common/net/deadline/packet_sing.go index 71a1c515..7085890e 100644 --- a/common/net/deadline/packet_sing.go +++ b/common/net/deadline/packet_sing.go @@ -69,7 +69,7 @@ FOR: c.netPacketConn.resultCh <- nil break FOR } - case <-c.netPacketConn.pipeDeadline.wait(): + case <-c.netPacketConn.pipeDeadline.Wait(): return M.Socksaddr{}, os.ErrDeadlineExceeded } } @@ -146,7 +146,7 @@ FOR: c.netPacketConn.resultCh <- nil break FOR } - case <-c.netPacketConn.pipeDeadline.wait(): + case <-c.netPacketConn.pipeDeadline.Wait(): return nil, M.Socksaddr{}, os.ErrDeadlineExceeded } } diff --git a/common/net/deadline/pipe.go b/common/net/deadline/pipe.go index 2cccfb42..27612f58 100644 --- a/common/net/deadline/pipe.go +++ b/common/net/deadline/pipe.go @@ -9,24 +9,24 @@ import ( "time" ) -// pipeDeadline is an abstraction for handling timeouts. -type pipeDeadline struct { +// PipeDeadline is an abstraction for handling timeouts. +type PipeDeadline struct { mu sync.Mutex // Guards timer and cancel timer *time.Timer cancel chan struct{} // Must be non-nil } -func makePipeDeadline() pipeDeadline { - return pipeDeadline{cancel: make(chan struct{})} +func MakePipeDeadline() PipeDeadline { + return PipeDeadline{cancel: make(chan struct{})} } -// set sets the point in time when the deadline will time out. +// Set sets the point in time when the deadline will time out. // A timeout event is signaled by closing the channel returned by waiter. // Once a timeout has occurred, the deadline can be refreshed by specifying a // t value in the future. // // A zero value for t prevents timeout. -func (d *pipeDeadline) set(t time.Time) { +func (d *PipeDeadline) Set(t time.Time) { d.mu.Lock() defer d.mu.Unlock() @@ -61,8 +61,8 @@ func (d *pipeDeadline) set(t time.Time) { } } -// wait returns a channel that is closed when the deadline is exceeded. -func (d *pipeDeadline) wait() chan struct{} { +// Wait returns a channel that is closed when the deadline is exceeded. +func (d *PipeDeadline) Wait() chan struct{} { d.mu.Lock() defer d.mu.Unlock() return d.cancel diff --git a/common/net/deadline/pipe_sing.go b/common/net/deadline/pipe_sing.go index e39bde75..3c603d31 100644 --- a/common/net/deadline/pipe_sing.go +++ b/common/net/deadline/pipe_sing.go @@ -33,8 +33,8 @@ type pipe struct { localDone chan struct{} remoteDone <-chan struct{} - readDeadline pipeDeadline - writeDeadline pipeDeadline + readDeadline PipeDeadline + writeDeadline PipeDeadline readWaitOptions N.ReadWaitOptions } @@ -56,15 +56,15 @@ func Pipe() (net.Conn, net.Conn) { rdRx: cb1, rdTx: cn1, wrTx: cb2, wrRx: cn2, localDone: done1, remoteDone: done2, - readDeadline: makePipeDeadline(), - writeDeadline: makePipeDeadline(), + readDeadline: MakePipeDeadline(), + writeDeadline: MakePipeDeadline(), } p2 := &pipe{ rdRx: cb2, rdTx: cn2, wrTx: cb1, wrRx: cn1, localDone: done2, remoteDone: done1, - readDeadline: makePipeDeadline(), - writeDeadline: makePipeDeadline(), + readDeadline: MakePipeDeadline(), + writeDeadline: MakePipeDeadline(), } return p1, p2 } @@ -86,7 +86,7 @@ func (p *pipe) read(b []byte) (n int, err error) { return 0, io.ErrClosedPipe case isClosedChan(p.remoteDone): return 0, io.EOF - case isClosedChan(p.readDeadline.wait()): + case isClosedChan(p.readDeadline.Wait()): return 0, os.ErrDeadlineExceeded } @@ -99,7 +99,7 @@ func (p *pipe) read(b []byte) (n int, err error) { return 0, io.ErrClosedPipe case <-p.remoteDone: return 0, io.EOF - case <-p.readDeadline.wait(): + case <-p.readDeadline.Wait(): return 0, os.ErrDeadlineExceeded } } @@ -118,7 +118,7 @@ func (p *pipe) write(b []byte) (n int, err error) { return 0, io.ErrClosedPipe case isClosedChan(p.remoteDone): return 0, io.ErrClosedPipe - case isClosedChan(p.writeDeadline.wait()): + case isClosedChan(p.writeDeadline.Wait()): return 0, os.ErrDeadlineExceeded } @@ -134,7 +134,7 @@ func (p *pipe) write(b []byte) (n int, err error) { return n, io.ErrClosedPipe case <-p.remoteDone: return n, io.ErrClosedPipe - case <-p.writeDeadline.wait(): + case <-p.writeDeadline.Wait(): return n, os.ErrDeadlineExceeded } } @@ -145,8 +145,8 @@ func (p *pipe) SetDeadline(t time.Time) error { if isClosedChan(p.localDone) || isClosedChan(p.remoteDone) { return io.ErrClosedPipe } - p.readDeadline.set(t) - p.writeDeadline.set(t) + p.readDeadline.Set(t) + p.writeDeadline.Set(t) return nil } @@ -154,7 +154,7 @@ func (p *pipe) SetReadDeadline(t time.Time) error { if isClosedChan(p.localDone) || isClosedChan(p.remoteDone) { return io.ErrClosedPipe } - p.readDeadline.set(t) + p.readDeadline.Set(t) return nil } @@ -162,7 +162,7 @@ func (p *pipe) SetWriteDeadline(t time.Time) error { if isClosedChan(p.localDone) || isClosedChan(p.remoteDone) { return io.ErrClosedPipe } - p.writeDeadline.set(t) + p.writeDeadline.Set(t) return nil } @@ -192,7 +192,7 @@ func (p *pipe) waitReadBuffer() (buffer *buf.Buffer, err error) { return nil, io.ErrClosedPipe case isClosedChan(p.remoteDone): return nil, io.EOF - case isClosedChan(p.readDeadline.wait()): + case isClosedChan(p.readDeadline.Wait()): return nil, os.ErrDeadlineExceeded } select { @@ -211,7 +211,7 @@ func (p *pipe) waitReadBuffer() (buffer *buf.Buffer, err error) { return nil, io.ErrClosedPipe case <-p.remoteDone: return nil, io.EOF - case <-p.readDeadline.wait(): + case <-p.readDeadline.Wait(): return nil, os.ErrDeadlineExceeded } }