diff --git a/libraries/AP_Filesystem/AP_Filesystem_ROMFS.cpp b/libraries/AP_Filesystem/AP_Filesystem_ROMFS.cpp index f481d872558e5c..d4eca8812fb82f 100644 --- a/libraries/AP_Filesystem/AP_Filesystem_ROMFS.cpp +++ b/libraries/AP_Filesystem/AP_Filesystem_ROMFS.cpp @@ -32,6 +32,8 @@ int AP_Filesystem_ROMFS::open(const char *fname, int flags, bool allow_absolute_ errno = EROFS; return -1; } + + WITH_SEMAPHORE(record_sem); // search for free file record uint8_t idx; for (idx=0; idx + #include "AP_Filesystem_backend.h" class AP_Filesystem_ROMFS : public AP_Filesystem_Backend @@ -56,6 +58,9 @@ class AP_Filesystem_ROMFS : public AP_Filesystem_Backend void unload_file(FileData *fd) override; private: + // protect searching for free file/dir records when opening/closing + HAL_Semaphore record_sem; + // only allow up to 4 files at a time static constexpr uint8_t max_open_file = 4; static constexpr uint8_t max_open_dir = 4;