From 44c69b1e73aa1d408f8b0567bd5d910728e31c3c Mon Sep 17 00:00:00 2001
From: kali <kali@leap.se>
Date: Wed, 3 Feb 2021 22:49:03 +0100
Subject: [PATCH] [bug] fix segfault in osx with activation

this is a regression that was introduced with previous changes to the
menus in windows. activation segfaults in linux and osx, so capture the event
only for windows. did not investigate further about the causes, but it seems
like a good workaround for the time being.
---
 gui/providers/providers.json | 2 +-
 gui/qml/main.qml             | 9 ++++++---
 pkg/backend/status.go        | 5 +++++
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/gui/providers/providers.json b/gui/providers/providers.json
index 4733a3eb..28918557 100644
--- a/gui/providers/providers.json
+++ b/gui/providers/providers.json
@@ -15,7 +15,7 @@
             "apiURL": "https://api.black.riseup.net/",
             "geolocationAPI": "https://api.black.riseup.net:9001/json",
             "caCertString": "-----BEGIN CERTIFICATE-----\nMIIFjTCCA3WgAwIBAgIBATANBgkqhkiG9w0BAQ0FADBZMRgwFgYDVQQKDA9SaXNl\ndXAgTmV0d29ya3MxGzAZBgNVBAsMEmh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UE\nAwwXUmlzZXVwIE5ldHdvcmtzIFJvb3QgQ0EwHhcNMTQwNDI4MDAwMDAwWhcNMjQw\nNDI4MDAwMDAwWjBZMRgwFgYDVQQKDA9SaXNldXAgTmV0d29ya3MxGzAZBgNVBAsM\nEmh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UEAwwXUmlzZXVwIE5ldHdvcmtzIFJv\nb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC76J4ciMJ8Sg0m\nTP7DF2DT9zNe0Csk4myoMFC57rfJeqsAlJCv1XMzBmXrw8wq/9z7XHv6n/0sWU7a\n7cF2hLR33ktjwODlx7vorU39/lXLndo492ZBhXQtG1INMShyv+nlmzO6GT7ESfNE\nLliFitEzwIegpMqxCIHXFuobGSCWF4N0qLHkq/SYUMoOJ96O3hmPSl1kFDRMtWXY\niw1SEKjUvpyDJpVs3NGxeLCaA7bAWhDY5s5Yb2fA1o8ICAqhowurowJpW7n5ZuLK\n5VNTlNy6nZpkjt1QycYvNycffyPOFm/Q/RKDlvnorJIrihPkyniV3YY5cGgP+Qkx\nHUOT0uLA6LHtzfiyaOqkXwc4b0ZcQD5Vbf6Prd20Ppt6ei0zazkUPwxld3hgyw58\nm/4UIjG3PInWTNf293GngK2Bnz8Qx9e/6TueMSAn/3JBLem56E0WtmbLVjvko+LF\nPM5xA+m0BmuSJtrD1MUCXMhqYTtiOvgLBlUm5zkNxALzG+cXB28k6XikXt6MRG7q\nhzIPG38zwkooM55yy5i1YfcIi5NjMH6A+t4IJxxwb67MSb6UFOwg5kFokdONZcwj\nshczHdG9gLKSBIvrKa03Nd3W2dF9hMbRu//STcQxOailDBQCnXXfAATj9pYzdY4k\nha8VCAREGAKTDAex9oXf1yRuktES4QIDAQABo2AwXjAdBgNVHQ4EFgQUC4tdmLVu\nf9hwfK4AGliaet5KkcgwDgYDVR0PAQH/BAQDAgIEMAwGA1UdEwQFMAMBAf8wHwYD\nVR0jBBgwFoAUC4tdmLVuf9hwfK4AGliaet5KkcgwDQYJKoZIhvcNAQENBQADggIB\nAGzL+GRnYu99zFoy0bXJKOGCF5XUXP/3gIXPRDqQf5g7Cu/jYMID9dB3No4Zmf7v\nqHjiSXiS8jx1j/6/Luk6PpFbT7QYm4QLs1f4BlfZOti2KE8r7KRDPIecUsUXW6P/\n3GJAVYH/+7OjA39za9AieM7+H5BELGccGrM5wfl7JeEz8in+V2ZWDzHQO4hMkiTQ\n4ZckuaL201F68YpiItBNnJ9N5nHr1MRiGyApHmLXY/wvlrOpclh95qn+lG6/2jk7\n3AmihLOKYMlPwPakJg4PYczm3icFLgTpjV5sq2md9bRyAg3oPGfAuWHmKj2Ikqch\nTd5CHKGxEEWbGUWEMP0s1A/JHWiCbDigc4Cfxhy56CWG4q0tYtnc2GMw8OAUO6Wf\nXu5pYKNkzKSEtT/MrNJt44tTZWbKV/Pi/N2Fx36my7TgTUj7g3xcE9eF4JV2H/sg\ntsK3pwE0FEqGnT4qMFbixQmc8bGyuakr23wjMvfO7eZUxBuWYR2SkcP26sozF9PF\ntGhbZHQVGZUTVPyvwahMUEhbPGVerOW0IYpxkm0x/eaWdTc4vPpf/rIlgbAjarnJ\nUN9SaWRlWKSdP4haujnzCoJbM7dU9bjvlGZNyXEekgeT0W2qFeGGp+yyUWw8tNsp\n0BuC1b7uW/bBn/xKm319wXVDvBgZgcktMolak39V7DVO\n-----END CERTIFICATE-----",
-            "timeStamp": "2020-11-03 19:53:36"
+            "timeStamp": "2020-11-30 22:04:27"
         }
     ]
 }
\ No newline at end of file
diff --git a/gui/qml/main.qml b/gui/qml/main.qml
index 17fb0055..5d431bd9 100644
--- a/gui/qml/main.qml
+++ b/gui/qml/main.qml
@@ -142,19 +142,20 @@ ApplicationWindow {
                     break
                 case SystemTrayIcon.Context:
                     console.debug("activated: context")
-                    if (Qt.platform.os !== "linux") {
+                    /* segfaults in osx and linux */
+                    if (Qt.platform.os === "windows") {
                         menu.open()
                     }
                     break
                 case SystemTrayIcon.DoubleClick:
                     console.debug("activated: double click")
-                    if (Qt.platform.os !== "linux") {
+                    if (Qt.platform.os === "windows") {
                         menu.open()
                     }
                     break
                 case SystemTrayIcon.Trigger:
                     console.debug("activated: left click")
-                    if (Qt.platform.os !== "linux") {
+                    if (Qt.platform.os === "windows") {
                         menu.open()
                     }
                     break
@@ -180,12 +181,14 @@ ApplicationWindow {
         // Helper to show notification messages
         function showNotification(msg) {
             console.log("Going to show notification message: ", msg);
+            /*
             if (supportsMessages) {
                 let appname = ctx ? ctx.appName: "VPN";
                 showMessage(appname, msg, null, 15000);
             } else {
                 console.log("System doesn't support systray notifications");
             }
+            */
         }
 
         menu: Menu {
diff --git a/pkg/backend/status.go b/pkg/backend/status.go
index ffa79fc0..f793e2fa 100644
--- a/pkg/backend/status.go
+++ b/pkg/backend/status.go
@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"log"
 	"sync"
+	"fmt" // DEBUG
 
 	"0xacab.org/leap/bitmask-vpn/pkg/bitmask"
 	"0xacab.org/leap/bitmask-vpn/pkg/config"
@@ -19,6 +20,7 @@ const (
 )
 
 var statusMutex sync.Mutex
+var updateMutex sync.Mutex
 
 // ctx will be our glorious global object.
 // if we ever switch again to a provider-agnostic app, we should keep a map here.
@@ -55,10 +57,13 @@ func (c connectionCtx) toJson() ([]byte, error) {
 		log.Println(err)
 		return nil, err
 	}
+	fmt.Println(">>> ctx toJson done")
 	return b, nil
 }
 
 func (c connectionCtx) updateStatus() {
+	updateMutex.Lock()
+	defer updateMutex.Unlock()
 	if stStr, err := c.bm.GetStatus(); err != nil {
 		log.Printf("Error getting status: %v", err)
 	} else {
-- 
GitLab