diff options
author | Michael J. Chudobiak <mjc@avtechpulse.com> | 2012-10-04 08:36:46 -0400 |
---|---|---|
committer | Michael J. Chudobiak <mjc@avtechpulse.com> | 2012-10-04 08:36:46 -0400 |
commit | b2c2c72d381ab1b32fa5b5fc4e890fef6c2bf1e0 (patch) | |
tree | 7b940ceca71c7b536ab88ea42729fd8d6633f19a /flash.c | |
parent | a0f966ce43e7286d7e033d0b17ab00d6ff6609b5 (diff) |
put flash writes in a mutex lock
Diffstat (limited to 'flash.c')
-rw-r--r-- | flash.c | 38 |
1 files changed, 22 insertions, 16 deletions
@@ -259,7 +259,7 @@ bool persistence_unfreeze(char* dest, void* result, unsigned int len, uint32_t v } -int readUserBlock(FlashStruct *mem) +static int readUserBlock(FlashStruct *mem) { // try to unfreeze the main file @@ -295,31 +295,37 @@ void writeUserBlock(FlashStruct *mem, int addr, int numbytes) // *** that the main file is valid before backing it up I guess... *** // *** but I don't think this situation should arise. *** + static GMutex mutex; + + g_mutex_lock (&mutex); + if (!globals.Flags.flash_writes_suspended) { // backup the main copy of the file - if (globals.Flags.shutdown_started) return; - - globals.Flags.flash_write_in_progress = TRUE; - bool backup_ok = persistence_copyfile(MAINFILE, BACKUPFILE); - globals.Flags.flash_write_in_progress = FALSE; + if (!globals.Flags.shutdown_started) { - if (backup_ok) { - if (globals.Flags.shutdown_started) return; globals.Flags.flash_write_in_progress = TRUE; + bool backup_ok = persistence_copyfile(MAINFILE, BACKUPFILE); + globals.Flags.flash_write_in_progress = FALSE; + + if (backup_ok && !globals.Flags.shutdown_started) { + globals.Flags.flash_write_in_progress = TRUE; - if (!persistence_freeze(MAINFILE, mem, addr, numbytes, sizeof(*mem), 0)) { - if (errno != PERSIST_ERR_COULDNTWRITE) { - printf("Error while trying to write, %d. **Write did not happen!!!**\n", errno); - } else { - printf("Error while writing data to disk. **File is potentially corrupt!**\n"); + if (!persistence_freeze(MAINFILE, mem, addr, numbytes, sizeof(*mem), 0)) { + if (errno != PERSIST_ERR_COULDNTWRITE) { + printf("Error while trying to write, %d. **Write did not happen!!!**\n", errno); + } else { + printf("Error while writing data to disk. **File is potentially corrupt!**\n"); + } } + globals.Flags.flash_write_in_progress = FALSE; + } else { + printf("Could not backup current file. **Write did not happen!!!**\n"); } - globals.Flags.flash_write_in_progress = FALSE; - } else { - printf("Could not backup current file. **Write did not happen!!!**\n"); } } + + g_mutex_unlock (&mutex); } |