From 5931438274d663e7883a791610ee031e75022da0 Mon Sep 17 00:00:00 2001
From: Pea Nut <peanut2@systemli.org>
Date: Wed, 17 Jul 2024 11:59:52 +0200
Subject: [PATCH] Close log file during teardown

cli (cmd/bitmask-helper/main.go and) and helpers (pkg/pickle/helpers.go)
were also fixed.
---
 cmd/bitmask-helper/main.go |  1 +
 pkg/backend/init.go        |  2 ++
 pkg/config/logger.go       | 10 ++++++++--
 pkg/pickle/helpers.go      |  1 +
 pkg/vpn/bitmask.go         |  2 ++
 5 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/cmd/bitmask-helper/main.go b/cmd/bitmask-helper/main.go
index 620f9e59..41803c57 100644
--- a/cmd/bitmask-helper/main.go
+++ b/cmd/bitmask-helper/main.go
@@ -35,6 +35,7 @@ var (
 func main() {
 	config.LogPath = path.Join(config.Path, logFile)
 	config.ConfigureLogger()
+	defer config.CloseLogger()
 	helper.Version = Version
 	helper.AppName = AppName
 
diff --git a/pkg/backend/init.go b/pkg/backend/init.go
index b07e964e..6e236abd 100644
--- a/pkg/backend/init.go
+++ b/pkg/backend/init.go
@@ -69,12 +69,14 @@ func initializeBitmask(errCh chan string, opts *InitOpts) {
 
 	b, err := bitmask.InitializeBitmask(ctx.cfg)
 	if err != nil {
+		config.CloseLogger()
 		log.Error().
 			Err(err).
 			Msg("Could not initialize bitmask")
 		errCh <- err.Error()
 		return
 	}
+
 	// right now we just get autostart from an init flag,
 	// but we want to be able to persist that option from the preferences
 	// pane
diff --git a/pkg/config/logger.go b/pkg/config/logger.go
index 6ddee49a..af95c10d 100644
--- a/pkg/config/logger.go
+++ b/pkg/config/logger.go
@@ -22,10 +22,12 @@ import (
 	"github.com/rs/zerolog/log"
 )
 
+var logFile *os.File
+
 func ConfigureLogger() {
 	os.MkdirAll(Path, 0750)
 
-	runLogFile, _ := os.OpenFile(
+	logFile, _ = os.OpenFile(
 		LogPath,
 		os.O_RDWR|os.O_CREATE|os.O_APPEND,
 		0644,
@@ -35,7 +37,7 @@ func ConfigureLogger() {
 		TimeFormat: "2006-01-02T15:04:05.999Z07:00",
 	}
 
-	multi := zerolog.MultiLevelWriter(consoleWriter, runLogFile)
+	multi := zerolog.MultiLevelWriter(consoleWriter, logFile)
 	log.Logger = zerolog.New(multi).With().Timestamp().Logger()
 
 	envLogLevel := os.Getenv("LOG_LEVEL")
@@ -52,3 +54,7 @@ func ConfigureLogger() {
 		Str("hint", "you can change the log level with env LOG_LEVEL=INFO|DEBUG|TRACE").
 		Msg("Enabling logging")
 }
+
+func CloseLogger() {
+	logFile.Close()
+}
diff --git a/pkg/pickle/helpers.go b/pkg/pickle/helpers.go
index a79b6ab4..2e39644f 100644
--- a/pkg/pickle/helpers.go
+++ b/pkg/pickle/helpers.go
@@ -132,6 +132,7 @@ func dumpHelper(fname, dest string, isExec bool) {
 func InstallHelpers() {
 	// logger is not configured at this point
 	config.ConfigureLogger()
+	defer config.CloseLogger()
 
 	// this  function can be called by command line argument: riseup-vpn --install-helpers
 	log.Info().Msg("Installing helpers")
diff --git a/pkg/vpn/bitmask.go b/pkg/vpn/bitmask.go
index 807990ac..eb5a9dcf 100644
--- a/pkg/vpn/bitmask.go
+++ b/pkg/vpn/bitmask.go
@@ -158,6 +158,8 @@ func (b *Bitmask) GetSnowflakeCh() <-chan *snowflake.StatusEvent {
 // Close the connection to bitmask, and does cleanup of temporal files
 func (b *Bitmask) Close() {
 	log.Info().Msg("Close: cleanup and vpn shutdown...")
+	defer config.CloseLogger()
+
 	err := b.StopVPN()
 	if err != nil {
 		log.Warn().
-- 
GitLab