From de03ab20f9c372435c5b2f740fe270bc116ef3bf Mon Sep 17 00:00:00 2001 From: Intel A80486DX2-66 Date: Tue, 30 Jul 2024 17:50:36 +0300 Subject: [PATCH] reverse-ramdisk.c: fix file locking --- c-programming/experiments/reverse-ramdisk.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/c-programming/experiments/reverse-ramdisk.c b/c-programming/experiments/reverse-ramdisk.c index 0dd0328..be05f55 100644 --- a/c-programming/experiments/reverse-ramdisk.c +++ b/c-programming/experiments/reverse-ramdisk.c @@ -169,7 +169,8 @@ int tf_free(int ID) { // Delete the file if (remove(temp_files[index].file_path) != 0) { - LINE_FAIL(-1); + temp_files[index].locked = false; + LINE_FAIL(-2); return -1; } @@ -256,13 +257,15 @@ int tf_write(int ID, size_t offset, void* src, size_t data_size) { (size_t) #endif bytes_written != data_size) { + temp_files[index].locked = false; errno = EIO; return -1; } #if IS_POSIX if (fsync(file) == -1) { - LINE_FAIL(-1); + temp_files[index].locked = false; + LINE_FAIL(-2); return -1; } #else @@ -302,11 +305,14 @@ int tf_read(int ID, size_t offset, void* dest, size_t data_size) { NULL #endif ) { + temp_files[index].locked = false; return -1; + } // Read the data from the file void* src = malloc(data_size); if (src == NULL) { + temp_files[index].locked = false; #if IS_POSIX close #else @@ -327,7 +333,8 @@ int tf_read(int ID, size_t offset, void* dest, size_t data_size) { #endif (file, offset, SEEK_SET) == -1) { free(src); - LINE_FAIL(-2); + temp_files[index].locked = false; + LINE_FAIL(-3); return -1; } @@ -346,6 +353,7 @@ int tf_read(int ID, size_t offset, void* dest, size_t data_size) { (size_t) #endif bytes_read != data_size) { + temp_files[index].locked = false; errno = EIO; return -1; }