#include "new_debug_ch.h"
DECLARE_DEBUG_CHANNEL(osutil);
-static char *lock_filename;
+static char *lock_filename = NULL;
static HANDLE lock_file = INVALID_HANDLE_VALUE;
static sdcard_info info = {
static void remove_vm_lock_os(void)
{
- g_assert(lock_file != INVALID_HANDLE_VALUE);
+ g_free(lock_filename);
+ lock_filename = NULL;
- CloseHandle(lock_file);
+ if (lock_file == INVALID_HANDLE_VALUE) {
+ return;
+ }
+ CloseHandle(lock_file);
lock_file = INVALID_HANDLE_VALUE;
- g_free(lock_filename);
}
static void notify_remove_lock(Notifier *notifier, void *data)
*/
void make_vm_lock_os(void)
{
- char *drive_image_filename = g_strdup(get_drive_image_file());
+ g_assert(lock_file == INVALID_HANDLE_VALUE);
+ g_assert(lock_filename == NULL);
- lock_filename = g_strdup_printf("%s.lock", drive_image_filename);
+ lock_filename = g_strdup_printf("%s.lock", get_drive_image_file());
- g_free(drive_image_filename);
-
- if(g_mkdir_with_parents(g_path_get_dirname(lock_filename), 0777)) {
- LOG_WARNING("Can not create lock file: %ld\n", GetLastError());
+ if (g_mkdir_with_parents(g_path_get_dirname(lock_filename), 0777)) {
+ LOG_WARNING("Can not create directory for lock file: %ld\n",
+ GetLastError());
}
- lock_file = CreateFile(lock_filename, GENERIC_READ | GENERIC_WRITE, 0,
- NULL, CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL);
+ lock_file = CreateFile(lock_filename,
+ GENERIC_READ | GENERIC_WRITE,
+ 0, // No share
+ NULL,
+ CREATE_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE,
+ NULL);
if (lock_file == INVALID_HANDLE_VALUE) {
DWORD error = GetLastError();
// On Windows, the file opened by CreateFile has exclusive lock
exit(1);
}
- LOG_WARNING("Can not create lock file: %0xlx\n", error);
-
+ LOG_WARNING("Failed to create lock file: %0xlx\n", error);
}
emulator_add_exit_notifier(&remove_lock);