mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-01 00:54:01 +03:00
Merge pull request #189 from 9seconds/relay-close-racecondition
Fix race condition in closing a relay
This commit is contained in:
@@ -68,11 +68,12 @@ func (r *Relay) Process(eastConn, westConn io.ReadWriteCloser) error {
|
|||||||
|
|
||||||
func (r *Relay) transmit(src io.ReadCloser, dst io.WriteCloser,
|
func (r *Relay) transmit(src io.ReadCloser, dst io.WriteCloser,
|
||||||
buffer []byte, direction string, wg *sync.WaitGroup) {
|
buffer []byte, direction string, wg *sync.WaitGroup) {
|
||||||
|
defer wg.Done()
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
|
r.ctxCancel()
|
||||||
src.Close()
|
src.Close()
|
||||||
dst.Close()
|
dst.Close()
|
||||||
wg.Done()
|
|
||||||
r.ctxCancel()
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if _, err := io.CopyBuffer(dst, src, buffer); err != nil {
|
if _, err := io.CopyBuffer(dst, src, buffer); err != nil {
|
||||||
@@ -92,6 +93,8 @@ func (r *Relay) transmit(src io.ReadCloser, dst io.WriteCloser,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *Relay) runObserver(one, another io.Closer, wg *sync.WaitGroup) {
|
func (r *Relay) runObserver(one, another io.Closer, wg *sync.WaitGroup) {
|
||||||
|
defer wg.Done()
|
||||||
|
|
||||||
ticker := time.NewTicker(time.Second)
|
ticker := time.NewTicker(time.Second)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -104,8 +107,6 @@ func (r *Relay) runObserver(one, another io.Closer, wg *sync.WaitGroup) {
|
|||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
wg.Done()
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
lastTickAt := time.Now()
|
lastTickAt := time.Now()
|
||||||
|
|||||||
Reference in New Issue
Block a user