diff options
| author | Kevin Kuehler <keur@xcf.berkeley.edu> | 2019-10-15 02:01:47 -0700 | 
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2019-10-16 11:13:53 -0400 | 
| commit | be4ea0d96b8cc70becb94f2d4e5abe41dea58f3a (patch) | |
| tree | 18ec2c9fb9a66522ea71f72f33d699d0bef6c3bf | |
| parent | 550ef0bc1f21dfaeb1bf216b28c3fce9a816cb73 (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.go | 1 | ||||
| -rw-r--r-- | widgets/msgviewer.go | 17 | 
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  | 
