未验证 提交 ce813882 编写于 作者: J Jeremy Koritzinsky 提交者: GitHub

Fix some alloc-dealloc mismatches found by ASAN (#66964)

* Fix some alloc-dealloc mismatches found by ASAN

* Define new static
上级 cde8b0b6
......@@ -34695,7 +34695,7 @@ void gc_heap::background_grow_c_mark_list()
assert (new_c_mark_list);
memcpy (new_c_mark_list, c_mark_list, c_mark_list_length*sizeof(uint8_t*));
c_mark_list_length = c_mark_list_length*2;
delete c_mark_list;
delete[] c_mark_list;
c_mark_list = new_c_mark_list;
}
}
......@@ -103,6 +103,8 @@ UINT32 STUB_COLLIDE_WRITE_PCT = 100;
UINT32 STUB_COLLIDE_MONO_PCT = 0;
#endif // STUB_LOGGING
FastTable::NumCallStubs_t FastTable::NumCallStubs;
FastTable* BucketTable::dead = NULL; //linked list of the abandoned buckets
DispatchCache *g_resolveCache = NULL; //cache of dispatch stubs for in line lookup by resolve stubs.
......@@ -3346,7 +3348,7 @@ void BucketTable::Reclaim()
while (list)
{
size_t next = list->contents[CALL_STUB_DEAD_LINK];
delete [] (size_t*)list;
delete list;
list = (FastTable*) next;
}
}
......
......@@ -1567,8 +1567,7 @@ private:
while (size < numberOfEntries) {size = size<<1;}
// if (size == CALL_STUB_MIN_ENTRIES)
// size += 3;
size_t* bucket = new size_t[(sizeof(FastTable)/sizeof(size_t))+size+CALL_STUB_FIRST_INDEX];
FastTable* table = new (bucket) FastTable();
FastTable* table = new (NumCallStubs, size) FastTable();
table->InitializeContents(size);
return table;
}
......@@ -1592,6 +1591,15 @@ private:
//we have an unused cell to use as a temp at bucket[CALL_STUB_DEAD_LINK==2],
//and the table starts at bucket[CALL_STUB_FIRST_INDEX==3],
size_t contents[0];
void* operator new(size_t) = delete;
static struct NumCallStubs_t {} NumCallStubs;
void* operator new(size_t baseSize, NumCallStubs_t, size_t numCallStubs)
{
return ::operator new(baseSize + (numCallStubs + CALL_STUB_FIRST_INDEX) * sizeof(size_t));
}
};
#ifdef _MSC_VER
#pragma warning(pop)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册