History file handle leak
- Dominant language
- Go
- Stars
- 1.8k
- Forks
- 213
- PR merge metrics
- No merged PRs in 30d
Description
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)
}
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.