aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-12-05 14:44:46 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-03 17:09:14 +0100
commit658a15a075de2b5a77c1d1b4455eaf0ea0f81f47 (patch)
tree1dab8c78438b8a89ba1917aea26b4b1be9a71507 /src
parent74ef33c8818544ef64288ab7193897a96413216e (diff)
Clear out memory in the GC, not when constructing objects
Object construction shouldn't need to zero initialize itself, let's rather do this in the GC, where we can use fast memset's. Change-Id: I2f9efa1729183b0d737de5a84f92af319b2c5631 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/jsruntime/qv4mm.cpp2
-rw-r--r--src/qml/jsruntime/qv4object.cpp4
2 files changed, 2 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4mm.cpp b/src/qml/jsruntime/qv4mm.cpp
index f67efaffb9..625e34de07 100644
--- a/src/qml/jsruntime/qv4mm.cpp
+++ b/src/qml/jsruntime/qv4mm.cpp
@@ -275,6 +275,7 @@ Managed *MemoryManager::alloc(std::size_t size)
if (size >= MemoryManager::Data::MaxItemSize) {
// we use malloc for this
MemoryManager::Data::LargeItem *item = static_cast<MemoryManager::Data::LargeItem *>(malloc(size + sizeof(MemoryManager::Data::LargeItem)));
+ memset(item, 0, size + sizeof(MemoryManager::Data::LargeItem));
item->next = m_d->largeItems;
m_d->largeItems = item;
return item->managed();
@@ -520,6 +521,7 @@ void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size,
m->internalClass->vtable->collectDeletables(m, deletable);
m->internalClass->vtable->destroy(m);
+ memset(m, 0, size);
m->setNextFree(*f);
#ifdef V4_USE_VALGRIND
VALGRIND_DISABLE_ERROR_REPORTING;
diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp
index 106525d412..115473604c 100644
--- a/src/qml/jsruntime/qv4object.cpp
+++ b/src/qml/jsruntime/qv4object.cpp
@@ -72,17 +72,14 @@ DEFINE_MANAGED_VTABLE(Object);
Object::Object(ExecutionEngine *engine)
: Managed(engine->objectClass)
, memberDataAlloc(InlinePropertySize), memberData(inlineProperties)
- , arrayOffset(0), arrayDataLen(0), arrayAlloc(0), arrayAttributes(0), arrayData(0), sparseArray(0)
{
type = Type_Object;
flags = SimpleArray;
- memset(memberData, 0, sizeof(Property)*memberDataAlloc);
}
Object::Object(InternalClass *ic)
: Managed(ic)
, memberDataAlloc(InlinePropertySize), memberData(inlineProperties)
- , arrayOffset(0), arrayDataLen(0), arrayAlloc(0), arrayAttributes(0), arrayData(0), sparseArray(0)
{
Q_ASSERT(internalClass->vtable && internalClass->vtable != &Managed::static_vtbl);
type = Type_Object;
@@ -92,7 +89,6 @@ Object::Object(InternalClass *ic)
memberDataAlloc = internalClass->size;
memberData = new Property[memberDataAlloc];
}
- memset(memberData, 0, sizeof(Property)*memberDataAlloc);
}
Object::~Object()