diff options
Diffstat (limited to 'src/v4/qv4mm.cpp')
-rw-r--r-- | src/v4/qv4mm.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/v4/qv4mm.cpp b/src/v4/qv4mm.cpp index 26c26c04..0281aeca 100644 --- a/src/v4/qv4mm.cpp +++ b/src/v4/qv4mm.cpp @@ -128,7 +128,8 @@ bool operator<(const MemoryManager::Data::Chunk &a, const MemoryManager::Data::C } } // namespace QQmlJS::VM MemoryManager::MemoryManager() - : m_d(new Data(true)) + : m_d(new Data(true))\ + , m_contextList(0) { setEnableGC(true); #ifdef V4_USE_VALGRIND @@ -280,6 +281,20 @@ std::size_t MemoryManager::sweep() for (QVector<Data::Chunk>::iterator i = m_d->heapChunks.begin(), ei = m_d->heapChunks.end(); i != ei; ++i) freedCount += sweep(reinterpret_cast<char*>(i->memory.base()), i->memory.size(), i->chunkSize); + ExecutionContext *ctx = m_contextList; + ExecutionContext **n = &m_contextList; + while (ctx) { + ExecutionContext *next = ctx->next; + if (!ctx->marked) { + free(ctx); + *n = next; + } else { + ctx->marked = false; + n = &ctx->next; + } + ctx = next; + } + return freedCount; } |