aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdnan Maolood <me@adnano.co>2022-01-22 21:35:40 -0500
committerRobin Jarry <robin@jarry.cc>2022-01-24 12:06:41 +0100
commit6be78781a10a5fce78148599eba62cb2ea8822cb (patch)
tree30be9e7bb67800b9471ed7402beea9ea9b456c96
parentd922d7325c7b50425b60f84fc7be1f8d32ec86fd (diff)
downloadaerc-6be78781a10a5fce78148599eba62cb2ea8822cb.tar.gz
aerc-6be78781a10a5fce78148599eba62cb2ea8822cb.zip
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.
-rw-r--r--aerc.go23
1 files changed, 13 insertions, 10 deletions
diff --git a/aerc.go b/aerc.go
index 9d83d2cf..6467c616 100644
--- a/aerc.go
+++ b/aerc.go
@@ -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()