From b1ab48b9fc03e60e05e2a2a81c4ff21f3e50964a Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Fri, 25 May 2018 07:02:15 -0400 Subject: [PATCH] Include: Fix command line parser hang when threaded. --- include/verilated.cpp | 2 +- include/verilated.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/verilated.cpp b/include/verilated.cpp index e3a847edc..1ad503beb 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -1678,7 +1678,7 @@ void Verilated::flushCall() VL_MT_SAFE { } void Verilated::commandArgs(int argc, const char** argv) VL_MT_SAFE { - VerilatedLockGuard lock(m_mutex); + VerilatedLockGuard lock(s_args.m_argMutex); s_args.argc = argc; s_args.argv = argv; VerilatedImp::commandArgs(argc,argv); diff --git a/include/verilated.h b/include/verilated.h index 998740bfc..6d869ea5e 100644 --- a/include/verilated.h +++ b/include/verilated.h @@ -347,6 +347,7 @@ class Verilated { // no need to be save-restored (serialized) the // assumption is that the restore is allowed to pass different arguments static struct CommandArgValues { + VerilatedMutex m_argMutex; ///< Mutex for s_args members, when VL_THREADED int argc; const char** argv; CommandArgValues() : argc(0), argv(NULL) {}