From 81bc89e89404761d2fd15093f7f7ad209784e36a Mon Sep 17 00:00:00 2001 From: "kali kaneko (leap communications)" Date: Wed, 1 Dec 2021 20:08:33 +0100 Subject: [bug] clean exit --- gui/components/MainView.qml | 2 +- gui/main.cpp | 32 ++++++++++++++++++++++++-------- pkg/vpn/bonafide/bonafide.go | 13 +++++++++---- pkg/vpn/main.go | 2 ++ 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/gui/components/MainView.qml b/gui/components/MainView.qml index 0893a2a..0f5fb58 100644 --- a/gui/components/MainView.qml +++ b/gui/components/MainView.qml @@ -76,7 +76,7 @@ Page { text: qsTr("Quit") icon: "../resources/quit.svg" triggered: function () { - Qt.callLater(backend.quit) + backend.quit() } } } diff --git a/gui/main.cpp b/gui/main.cpp index 993ec2d..5a265eb 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -36,11 +36,6 @@ std::string getEnv(std::string const& key) return val == NULL ? std::string() : std::string(val); } -void signalHandler(int) { - Quit(); - exit(0); -} - QString getAppName(QJsonValue info, QString provider) { for (auto p: info.toArray()) { QJsonObject item = p.toObject(); @@ -51,17 +46,38 @@ QString getAppName(QJsonValue info, QString provider) { return "BitmaskVPN"; } -int main(int argc, char **argv) { - signal(SIGINT, signalHandler); +void catchUnixSignals(std::initializer_list quitSignals) { + auto handler = [](int sig) -> void { + printf("\nCatched signal(%d): quitting\n", sig); + Quit(); + QGuiApplication::quit(); + }; + + sigset_t blocking_mask; + sigemptyset(&blocking_mask); + for (auto sig : quitSignals) + sigaddset(&blocking_mask, sig); + + struct sigaction sa; + sa.sa_handler = handler; + sa.sa_mask = blocking_mask; + sa.sa_flags = 0; + + for (auto sig : quitSignals) + sigaction(sig, &sa, nullptr); +} +int main(int argc, char **argv) { Backend backend; QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication::setApplicationVersion(backend.getVersion()); - QApplication app(argc, argv); + QGuiApplication app(argc, argv); app.setQuitOnLastWindowClosed(false); app.setAttribute(Qt::AA_UseHighDpiPixmaps); + catchUnixSignals({SIGINT, SIGTERM}); + /* load providers json */ QFile providerJson (":/providers.json"); providerJson.open(QIODevice::ReadOnly | QIODevice::Text); diff --git a/pkg/vpn/bonafide/bonafide.go b/pkg/vpn/bonafide/bonafide.go index 907bba5..7bce545 100644 --- a/pkg/vpn/bonafide/bonafide.go +++ b/pkg/vpn/bonafide/bonafide.go @@ -247,10 +247,15 @@ func (b *Bonafide) maybeInitializeEIP() error { b.gateways = newGatewayPool(b.eip) } - // FIXME: let's update the menshen gateways every time we 'maybe initilize EIP' - // in a future we might want to be more clever on when to do that - // (when opening the locations tab in the UI, only on reconnects, ...) - b.fetchGatewaysFromMenshen() + // XXX For now, we just initialize once per session. + // We might update the menshen gateways every time we 'maybe initilize EIP' + // We might also want to be more clever on when to do that + // (when opening the locations tab in the UI, only on reconnects, ...) + // or just periodically - but we need to modify menshen api to + // pass a location parameter. + if len(b.gateways.recommended) == 0 { + b.fetchGatewaysFromMenshen() + } } return nil } diff --git a/pkg/vpn/main.go b/pkg/vpn/main.go index da6caf1..d780afe 100644 --- a/pkg/vpn/main.go +++ b/pkg/vpn/main.go @@ -20,6 +20,7 @@ import ( "io/ioutil" "log" "os" + "time" "0xacab.org/leap/bitmask-vpn/pkg/config" "0xacab.org/leap/bitmask-vpn/pkg/config/version" @@ -124,6 +125,7 @@ func (b *Bitmask) GetStatusCh() <-chan string { func (b *Bitmask) Close() { log.Printf("Close: cleanup and vpn shutdown...") b.StopVPN() + time.Sleep(500 * time.Millisecond) err := b.launch.close() if err != nil { log.Printf("There was an error closing the launcher: %v", err) -- cgit v1.2.3