aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4mm.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-03-26 15:11:48 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-27 20:39:59 +0100
commit7ae796cb141b73a1b215b2b0fd64b7ffbbd1e510 (patch)
tree9f9b45d8f2036cc50b4298f8a3fdbe33d4d1eeda /src/qml/jsruntime/qv4mm.cpp
parentb9bf708bf85ba062d009ccf5e13e3494dc88a5d1 (diff)
Get rid of collectDeletables
The method is only required for the QObjectWrapper, but there we can instead simply register the deletable in the destroy method. Change-Id: I944319d327859cce33ac31a174e8d56fc4babfc1 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4mm.cpp')
-rw-r--r--src/qml/jsruntime/qv4mm.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4mm.cpp b/src/qml/jsruntime/qv4mm.cpp
index 421cc2cf82..95d105c993 100644
--- a/src/qml/jsruntime/qv4mm.cpp
+++ b/src/qml/jsruntime/qv4mm.cpp
@@ -114,6 +114,7 @@ struct MemoryManager::Data
LargeItem *largeItems;
+ GCDeletable *deletable;
// statistics:
#ifdef DETAILED_MM_STATS
@@ -127,6 +128,7 @@ struct MemoryManager::Data
, totalAlloc(0)
, maxShift(10)
, largeItems(0)
+ , deletable(0)
{
memset(smallItems, 0, sizeof(smallItems));
memset(nChunks, 0, sizeof(nChunks));
@@ -347,11 +349,8 @@ void MemoryManager::sweep(bool lastSweep)
}
}
- GCDeletable *deletable = 0;
- GCDeletable **firstDeletable = &deletable;
-
for (QVector<Data::Chunk>::iterator i = m_d->heapChunks.begin(), ei = m_d->heapChunks.end(); i != ei; ++i)
- sweep(reinterpret_cast<char*>(i->memory.base()), i->memory.size(), i->chunkSize, &deletable);
+ sweep(reinterpret_cast<char*>(i->memory.base()), i->memory.size(), i->chunkSize);
Data::LargeItem *i = m_d->largeItems;
Data::LargeItem **last = &m_d->largeItems;
@@ -370,16 +369,17 @@ void MemoryManager::sweep(bool lastSweep)
i = *last;
}
- deletable = *firstDeletable;
+ GCDeletable *deletable = m_d->deletable;
while (deletable) {
GCDeletable *next = deletable->next;
deletable->lastCall = lastSweep;
delete deletable;
deletable = next;
}
+ m_d->deletable = 0;
}
-void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size, GCDeletable **deletable)
+void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size)
{
// qDebug("chunkStart @ %p, size=%x, pos=%x (%x)", chunkStart, size, size>>4, m_d->smallItems[size >> 4]);
Managed **f = &m_d->smallItems[size >> 4];
@@ -402,9 +402,6 @@ void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size,
#ifdef V4_USE_VALGRIND
VALGRIND_ENABLE_ERROR_REPORTING;
#endif
- Object *o = m->asObject();
- if (o && o->vtable()->collectDeletables)
- o->vtable()->collectDeletables(m, deletable);
m->internalClass->vtable->destroy(m);
memset(m, 0, size);
@@ -525,6 +522,12 @@ void MemoryManager::dumpStats() const
#endif // DETAILED_MM_STATS
}
+void MemoryManager::registerDeletable(GCDeletable *d)
+{
+ d->next = m_d->deletable;
+ m_d->deletable = d;
+}
+
ExecutionEngine *MemoryManager::engine() const
{
return m_d->engine;