abiosoft / abiosoft/ishell

History file handle leak

未关闭
#113 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug
主要语言
Go
星标
1.8k
派生
213
PR 合并指标
30 天内没有已合并 PR

描述

The history file is not closed when it is reset, resulting in leaked file handles.

Here's a program that demonstrates the bug:
```
package main

import "gopkg.in/abiosoft/ishell.v2"

func main() {
shell := ishell.New()

shell.AddCmd(&ishell.Cmd{
Name: "on",
Func: func(ctx *ishell.Context) {
shell.SetHistoryPath("test-history")
},
})
shell.AddCmd(&ishell.Cmd{
Name: "off",
Func: func(ctx *ishell.Context) {
shell.SetHistoryPath("")
},
})

shell.Run()
}
```

By watching the output of `lsof -c main` on *nix can see that every call to `on` leaves the previous history file handle open. `off` does not close the existing file handle either.

It seems you need something like:
```
diff --git a/ishell.go b/ishell.go
index 098af06..c0545c1 100644
--- a/ishell.go
+++ b/ishell.go
@@ -393,6 +393,7 @@ func (s *Shell) SetHistoryPath(path string) {
// Instance.
config := s.reader.scanner.Config.Clone()
config.HistoryFile = path
+ s.reader.scanner.Close()
s.reader.scanner, _ = readline.NewEx(config)
}
```

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。