Commit b1bafab3 authored by Eric's avatar Eric

[Bugfix] fix unclosed fd

parent ce9add91
...@@ -238,6 +238,7 @@ func (c *Client) UploadFile(url string, gFile string, res interface{}, params .. ...@@ -238,6 +238,7 @@ func (c *Client) UploadFile(url string, gFile string, res interface{}, params ..
if err != nil { if err != nil {
return err return err
} }
defer f.Close()
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
bodyWriter := multipart.NewWriter(buf) bodyWriter := multipart.NewWriter(buf)
gName := filepath.Base(gFile) gName := filepath.Base(gFile)
......
...@@ -28,10 +28,12 @@ func GzipCompressFile(srcPath, dstPath string) error { ...@@ -28,10 +28,12 @@ func GzipCompressFile(srcPath, dstPath string) error {
if err != nil { if err != nil {
return err return err
} }
defer sf.Close()
df, err := os.Create(dstPath) df, err := os.Create(dstPath)
if err != nil { if err != nil {
return err return err
} }
defer df.Close()
writer := gzip.NewWriter(df) writer := gzip.NewWriter(df)
writer.Name = dstPath writer.Name = dstPath
writer.ModTime = time.Now().UTC() writer.ModTime = time.Now().UTC()
......
...@@ -129,10 +129,22 @@ func (h *interactiveHandler) watchWinSizeChange() { ...@@ -129,10 +129,22 @@ func (h *interactiveHandler) watchWinSizeChange() {
} }
func (h *interactiveHandler) pauseWatchWinSize() { func (h *interactiveHandler) pauseWatchWinSize() {
select {
case <-h.sess.Sess.Context().Done():
return
default:
}
h.winWatchChan <- false h.winWatchChan <- false
} }
func (h *interactiveHandler) resumeWatchWinSize() { func (h *interactiveHandler) resumeWatchWinSize() {
select {
case <-h.sess.Sess.Context().Done():
return
default:
}
h.winWatchChan <- true h.winWatchChan <- true
} }
......
...@@ -15,10 +15,13 @@ type WrapperSession struct { ...@@ -15,10 +15,13 @@ type WrapperSession struct {
inWriter io.WriteCloser inWriter io.WriteCloser
outReader io.ReadCloser outReader io.ReadCloser
mux *sync.RWMutex mux *sync.RWMutex
closed chan struct{}
} }
func (w *WrapperSession) initial() { func (w *WrapperSession) initial() {
w.initReadPip() w.initReadPip()
w.closed = make(chan struct{})
go w.readLoop() go w.readLoop()
} }
...@@ -37,11 +40,20 @@ func (w *WrapperSession) readLoop() { ...@@ -37,11 +40,20 @@ func (w *WrapperSession) readLoop() {
break break
} }
} }
w.mux.RLock()
_ = w.inWriter.Close() _ = w.inWriter.Close()
_ = w.outReader.Close()
w.mux.RUnlock()
close(w.closed)
} }
func (w *WrapperSession) Read(p []byte) (int, error) { func (w *WrapperSession) Read(p []byte) (int, error) {
select {
case <-w.closed:
return 0, io.EOF
default:
}
w.mux.RLock() w.mux.RLock()
defer w.mux.RUnlock() defer w.mux.RUnlock()
return w.outReader.Read(p) return w.outReader.Read(p)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment