summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-03-17 17:04:41 +0100
committerDavid Lönnhager <david.l@mullvad.net>2021-03-18 15:38:53 +0100
commita28347df01acb5efbf748eab2c1c0f5331e60610 (patch)
tree1effbcc45ecf4ddf0bf437f845a92793ad8b0896
parentc5ca247b486a09f149f88c89837cb276cf6c2181 (diff)
downloadmullvadvpn-a28347df01acb5efbf748eab2c1c0f5331e60610.tar.xz
mullvadvpn-a28347df01acb5efbf748eab2c1c0f5331e60610.zip
Close file handle before deleting logs
-rw-r--r--dist-assets/windows/installer.nsh9
-rw-r--r--windows/nsis-plugins/src/log/log.cpp15
-rw-r--r--windows/nsis-plugins/src/log/log.def2
3 files changed, 19 insertions, 7 deletions
diff --git a/dist-assets/windows/installer.nsh b/dist-assets/windows/installer.nsh
index 5f14fc23cc..a7ca239345 100644
--- a/dist-assets/windows/installer.nsh
+++ b/dist-assets/windows/installer.nsh
@@ -35,6 +35,7 @@
# Log targets
!define LOG_INSTALL 0
!define LOG_UNINSTALL 1
+!define LOG_VOID 2
# Windows error codes
!define ERROR_SERVICE_DOES_NOT_EXIST 1060
@@ -650,7 +651,7 @@
Push $1
Push $R0
- log::Initialize ${LOG_INSTALL}
+ log::SetLogTarget ${LOG_INSTALL}
log::Log "Running installer for ${PRODUCT_NAME} ${VERSION}"
log::LogWindowsVersion
@@ -859,7 +860,7 @@
Var /GLOBAL Silent
Var /GLOBAL NewVersion
- log::Initialize ${LOG_UNINSTALL}
+ log::SetLogTarget ${LOG_UNINSTALL}
log::Log "Running uninstaller for ${PRODUCT_NAME} ${VERSION}"
@@ -940,6 +941,8 @@
${ExtractWintun}
${RemoveWintun}
+ log::SetLogTarget ${LOG_VOID}
+
${RemoveLogsAndCache}
${If} $Silent != 1
MessageBox MB_ICONQUESTION|MB_YESNO "Would you like to remove settings files as well?" IDNO customRemoveFiles_after_remove_settings
@@ -947,6 +950,8 @@
${EndIf}
customRemoveFiles_after_remove_settings:
${Else}
+ log::SetLogTarget ${LOG_VOID}
+
SetShellVarContext all
Delete "$LOCALAPPDATA\Mullvad VPN\uninstall.log"
${EndIf}
diff --git a/windows/nsis-plugins/src/log/log.cpp b/windows/nsis-plugins/src/log/log.cpp
index 70cd185206..4a7bf1bf49 100644
--- a/windows/nsis-plugins/src/log/log.cpp
+++ b/windows/nsis-plugins/src/log/log.cpp
@@ -184,17 +184,18 @@ std::wstring GetWindowsVersion()
} // anonymous namespace
//
-// Initialize
+// SetLogTarget
//
// Opens and maintains an open handle to the log file.
//
enum class LogTarget
{
LOG_INSTALL = 0,
- LOG_UNINSTALL = 1
+ LOG_UNINSTALL = 1,
+ LOG_VOID = 2
};
-void __declspec(dllexport) NSISCALL Initialize
+void __declspec(dllexport) NSISCALL SetLogTarget
(
HWND hwndParent,
int string_size,
@@ -225,6 +226,12 @@ void __declspec(dllexport) NSISCALL Initialize
logfile = L"uninstall.log";
break;
}
+ case static_cast<int>(LogTarget::LOG_VOID):
+ {
+ delete g_logger;
+ g_logger = nullptr;
+ return;
+ }
default:
{
THROW_ERROR("Invalid log target");
@@ -263,7 +270,7 @@ void __declspec(dllexport) NSISCALL Initialize
{
std::stringstream ss;
- ss << "Failed to initialize logging plugin."
+ ss << "Failed to set logging plugin target."
<< std::endl
<< err.what();
diff --git a/windows/nsis-plugins/src/log/log.def b/windows/nsis-plugins/src/log/log.def
index 11cffd21e3..d51b04ab7b 100644
--- a/windows/nsis-plugins/src/log/log.def
+++ b/windows/nsis-plugins/src/log/log.def
@@ -2,7 +2,7 @@ LIBRARY log
EXPORTS
-Initialize
+SetLogTarget
Log
LogWithDetails
LogWindowsVersion