Internals: Fix VL_ALLOC_RANDOM_CHECKS with multiple threads
This commit is contained in:
parent
e23c7a510e
commit
e9dd6eaaf0
|
|
@ -997,13 +997,15 @@ void AstNode::operator delete(void* objp, size_t size) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VL_ALLOC_RANDOM_CHECKS
|
#ifdef VL_ALLOC_RANDOM_CHECKS
|
||||||
void* AstNode::operator new(size_t size) {
|
void* AstNode::operator new(size_t size) { // VL_MT_SAFE
|
||||||
// Make the following small to debug this routine, larger for performance and better random
|
// Make the following small to debug this routine, larger for performance and better random
|
||||||
constexpr size_t POOL_SIZE = 65536; // Ideally large enough to fit all nodes used in tests
|
constexpr size_t POOL_SIZE = 65536; // Ideally large enough to fit all nodes used in tests
|
||||||
// Randomly select from a large pool (POOL_SIZE) of max-node sized (MAX_NODE_SIZE) pointers
|
// Randomly select from a large pool (POOL_SIZE) of max-node sized (MAX_NODE_SIZE) pointers
|
||||||
static uint64_t s_lfsr = 0; // LFSR, 0 = didn't initialize yet
|
static uint64_t s_lfsr = 0; // LFSR, 0 = didn't initialize yet
|
||||||
static std::array<void*, POOL_SIZE> s_nodePool;
|
|
||||||
if (int seed = v3Global.opt.debugAllocRandom()) {
|
if (int seed = v3Global.opt.debugAllocRandom()) {
|
||||||
|
static V3Mutex s_mutex;
|
||||||
|
const V3LockGuard lock{s_mutex};
|
||||||
|
static std::array<void*, POOL_SIZE> s_nodePool VL_GUARDED_BY(s_mutex);
|
||||||
constexpr uint64_t POLYNOMIAL = 0x80000000000019e2ULL;
|
constexpr uint64_t POLYNOMIAL = 0x80000000000019e2ULL;
|
||||||
UASSERT_STATIC(size <= ASTGEN_MAX_NODE_SIZE, "fix ASTGEN_MAX_NODE_SIZE");
|
UASSERT_STATIC(size <= ASTGEN_MAX_NODE_SIZE, "fix ASTGEN_MAX_NODE_SIZE");
|
||||||
if (!s_lfsr) {
|
if (!s_lfsr) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue