From 58fe5021bc640272262e18677da94b5b67940156 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sun, 26 May 2019 02:58:29 -0700 Subject: [PATCH] defer() Signed-off-by: Jeff Carr --- eventChannel.go | 1 + main.go | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/eventChannel.go b/eventChannel.go index f2bfdaa..673c4e5 100644 --- a/eventChannel.go +++ b/eventChannel.go @@ -52,6 +52,7 @@ func addEvent(msg *pb.Event) { // func processEvents(mychannel chan *pb.Event) { func processEvents() { + defer r() // a golang trick to try to not crash on certain errors for { currentMessage = <-mychannel log.Println("processEvents() RECIEVED msg = ", currentMessage) diff --git a/main.go b/main.go index 247e372..58f89f5 100644 --- a/main.go +++ b/main.go @@ -155,15 +155,17 @@ func main() { // might be a good approach. Time will tell... // func mainMouseClick(b *gui.ButtonMap) { + defer r() // a golang trick to try to not crash on certain errors + if (b == nil) { - log.Println("main() BACK IN CONTROL PANEL CODE (button is nil) WHY DID THIS HAPPEN?") - log.Println("main() BACK IN CONTROL PANEL CODE (button is nil) WHY DID THIS HAPPEN?") + log.Println("mainMouseClick() BACK IN MAIN CONTROL PANEL CODE (button is nil) WHY DID THIS HAPPEN?") + log.Println("mainMouseClick() BACK IN MAIN CONTROL PANEL CODE (button is nil) WHY DID THIS HAPPEN?") onExit(fmt.Errorf("mainMouseClick() got b = nil")) } log.Println("mainMouseClick() b.Action =", b.Action) gui.Data.Current = b.Account - log.Println("main() BACK IN CONTROL PANEL CODE") + log.Println("mainMouseClick() BACK IN CONTROL PANEL CODE") if (b.Account != nil) { log.Println("\tmainMouseClick() setting current account = ", b.Account.Nick) } @@ -309,6 +311,18 @@ func mainMouseClick(b *gui.ButtonMap) { } } +// Doing this can sometimes avoid a panic() on things like: +// panic: runtime error: slice bounds out of range + +func r() { + if r := recover(); r != nil { + fmt.Println("recover() SOMETHING IS REALLY BROKEN r =", r) + fmt.Println("recover() SOMETHING IS REALLY BROKEN r =", r) + fmt.Println("recover() SOMETHING IS REALLY BROKEN r =", r) + } +} + + func prepareAndSend(event *pb.Event) { if (event.Account == nil) { log.Println("\tmain.prepareAndSend() ERROR event.Token = nil")