aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Kuehler <keur@xcf.berkeley.edu>2019-10-15 02:01:47 -0700
committerDrew DeVault <sir@cmpwn.com>2019-10-16 11:13:53 -0400
commitbe4ea0d96b8cc70becb94f2d4e5abe41dea58f3a (patch)
tree18ec2c9fb9a66522ea71f72f33d699d0bef6c3bf
parent550ef0bc1f21dfaeb1bf216b28c3fce9a816cb73 (diff)
Cleanup pager processes after closing a msgviewer
A pager is spawned every time an email is viewed but not killed off when quitting the msgviewer, thus leading to process leakage. This patch fixes this by adding a Close method to the msgview widget, which is called in the close command. Signed-off-by: Kevin Kuehler <keur@xcf.berkeley.edu>
-rw-r--r--commands/msgview/close.go1
-rw-r--r--widgets/msgviewer.go17
2 files changed, 18 insertions, 0 deletions
diff --git a/commands/msgview/close.go b/commands/msgview/close.go
index 9966735..ed86405 100644
--- a/commands/msgview/close.go
+++ b/commands/msgview/close.go
@@ -25,6 +25,7 @@ func (Close) Execute(aerc *widgets.Aerc, args []string) error {
return errors.New("Usage: close")
}
mv, _ := aerc.SelectedTab().(*widgets.MessageViewer)
+ mv.Close()
aerc.RemoveTab(mv)
return nil
}
diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go
index c179070..d5bbace 100644
--- a/widgets/msgviewer.go
+++ b/widgets/msgviewer.go
@@ -284,6 +284,10 @@ func (mv *MessageViewer) NextPart() {
mv.Invalidate()
}
+func (mv *MessageViewer) Close() {
+ mv.switcher.Cleanup()
+}
+
func (ps *PartSwitcher) Invalidate() {
ps.DoInvalidate(ps)
}
@@ -381,6 +385,12 @@ func (ps *PartSwitcher) MouseEvent(localX int, localY int, event tcell.Event) {
}
}
+func (ps *PartSwitcher) Cleanup() {
+ for _, partViewer := range ps.parts {
+ partViewer.Cleanup()
+ }
+}
+
func (mv *MessageViewer) Event(event tcell.Event) bool {
return mv.switcher.Event(event)
}
@@ -593,6 +603,13 @@ func (pv *PartViewer) Draw(ctx *ui.Context) {
pv.term.Draw(ctx)
}
+func (pv *PartViewer) Cleanup() {
+ if pv.pager != nil && pv.pager.Process != nil {
+ pv.pager.Process.Kill()
+ pv.pager = nil
+ }
+}
+
type HeaderView struct {
ui.Invalidatable
Name string