summaryrefslogtreecommitdiff
path: root/pkg/server/hook/tee.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-02-29 21:50:58 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-02-29 23:48:53 +0300
commit8b7283ad01a8dde92cf708f81f6c1105647bafd7 (patch)
tree6598c17258bacb4e84f6e486e591460437e93086 /pkg/server/hook/tee.go
parent7ab641d239e502e09c6f05dfc7efd069fcf3c314 (diff)
close pipes at end of stream
Diffstat (limited to 'pkg/server/hook/tee.go')
-rw-r--r--pkg/server/hook/tee.go20
1 files changed, 5 insertions, 15 deletions
diff --git a/pkg/server/hook/tee.go b/pkg/server/hook/tee.go
index fd30a81..521164b 100644
--- a/pkg/server/hook/tee.go
+++ b/pkg/server/hook/tee.go
@@ -6,7 +6,6 @@ import (
"fmt"
"os"
"path"
- "sync"
"tunnel/pkg/server/env"
"tunnel/pkg/server/opts"
"tunnel/pkg/server/queue"
@@ -15,9 +14,7 @@ import (
const teeDefaultFile = "/tmp/tunnel/dump"
type tee struct {
- f *os.File
- mu sync.Mutex
- wg sync.WaitGroup
+ f *os.File
}
type teeHook struct {
@@ -41,8 +38,6 @@ func (t *tee) dump(s string, p []byte) error {
}
func (t *tee) Send(rq, wq queue.Q) error {
- defer t.wg.Done()
-
for b := range rq {
t.dump(">", b)
wq <- b
@@ -52,8 +47,6 @@ func (t *tee) Send(rq, wq queue.Q) error {
}
func (t *tee) Recv(rq, wq queue.Q) error {
- defer t.wg.Done()
-
for b := range rq {
t.dump("<", b)
wq <- b
@@ -62,6 +55,10 @@ func (t *tee) Recv(rq, wq queue.Q) error {
return nil
}
+func (t *tee) Close() {
+ t.f.Close()
+}
+
func (h *teeHook) where(env env.Env) string {
if h.file != "" {
return h.file
@@ -93,13 +90,6 @@ func (h *teeHook) Open(env env.Env) (interface{}, error) {
t.f = f
}
- t.wg.Add(2)
-
- go func() {
- t.wg.Wait()
- t.f.Close()
- }()
-
return &t, nil
}