aerc: shutdown if socket communication fails

When provided with a mailto argument, aerc tries to connect to an
existing instance via a unix socket. If that fails, it starts up a new
instance and tries again. However, if that fails again (e.g. if the
unix server could not be started) then the new instance will remain open
without any indication that an error occured. Instead, shutdown the new
instance so the user can see the error message.
This commit is contained in:
Adnan Maolood 2022-01-22 21:35:40 -05:00 committed by Robin Jarry
parent d922d7325c
commit 6be78781a1

23
aerc.go
View file

@ -123,7 +123,7 @@ func main() {
return
}
}
initDone := make(chan struct{})
retryExec := false
args := os.Args[optind:]
if len(args) > 1 {
usage()
@ -134,15 +134,9 @@ func main() {
if err == nil {
return // other aerc instance takes over
}
fmt.Fprintf(os.Stderr, "Failed to communicate to aerc: %v", err)
fmt.Fprintf(os.Stderr, "Failed to communicate to aerc: %v\n", err)
// continue with setting up a new aerc instance and retry after init
go func(msg string) {
<-initDone
err := lib.ConnectAndExec(msg)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to communicate to aerc: %v", err)
}
}(arg)
retryExec = true
}
var (
@ -203,7 +197,16 @@ func main() {
// set the aerc version so that we can use it in the template funcs
templates.SetVersion(Version)
close(initDone)
if retryExec {
// retry execution
arg := args[0]
err := lib.ConnectAndExec(arg)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to communicate to aerc: %v\n", err)
aerc.CloseBackends()
return
}
}
if isatty.IsTerminal(os.Stderr.Fd()) {
setWindowTitle()