Open crweatherly opened 5 years ago
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.
lsof -c main
on
off
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) }
The history file is not closed when it is reset, resulting in leaked file handles.
Here's a program that demonstrates the bug:
By watching the output of
lsof -c main
on *nix can see that every call toon
leaves the previous history file handle open.off
does not close the existing file handle either.It seems you need something like: