From c64c81b7a31928add733e5971fb19f4d74c31af4 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Tue, 19 May 2020 08:31:52 -0400 Subject: [PATCH] Workaround missing guard (partial #2333). --- include/verilated_imp.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/verilated_imp.h b/include/verilated_imp.h index d19d994e5..43603baf1 100644 --- a/include/verilated_imp.h +++ b/include/verilated_imp.h @@ -483,21 +483,21 @@ public: // But only for verilated*.cpp } static void fdFlush(IData fdi) VL_MT_SAFE { FILE* fp[30]; - VerilatedLockGuard lock(s_s.m_fdMutex); const int n = fdToFp(fdi, fp, 30); + VerilatedLockGuard lock(s_s.m_fdMutex); for (int i = 0; i < n; i++) fflush(fp[i]); } static IData fdSeek(IData fdi, IData offset, IData origin) VL_MT_SAFE { FILE* fp; - VerilatedLockGuard lock(s_s.m_fdMutex); const int n = fdToFp(fdi, &fp); + VerilatedLockGuard lock(s_s.m_fdMutex); if (VL_UNLIKELY(!fp || (n != 1))) return 0; return static_cast(fseek(fp, static_cast(offset), static_cast(origin))); } static IData fdTell(IData fdi) VL_MT_SAFE { FILE* fp; - VerilatedLockGuard lock(s_s.m_fdMutex); const int n = fdToFp(fdi, &fp); + VerilatedLockGuard lock(s_s.m_fdMutex); if (VL_UNLIKELY(!fp || (n != 1))) return 0; return static_cast(ftell(fp)); } @@ -524,6 +524,7 @@ public: // But only for verilated*.cpp } static inline int fdToFp(IData fdi, FILE** fp, std::size_t max = 1) VL_MT_SAFE { if (VL_UNLIKELY(!fp || (max == 0))) return 0; + VerilatedLockGuard lock(s_s.m_fdMutex); int out = 0; if ((fdi & (1 << 31)) != 0) { // Non-MCD case