[vmkit-commits] [vmkit] r72550 - in /vmkit/trunk/lib/Mvm: GCMmap2/gccollector.cpp GCMmap2/gccollector.h Runtime/Object.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu May 28 15:23:39 PDT 2009
Author: geoffray
Date: Thu May 28 17:23:38 2009
New Revision: 72550
URL: http://llvm.org/viewvc/llvm-project?rev=72550&view=rev
Log:
Let the finalizer also kill native objects.
Modified:
vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp
vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
vmkit/trunk/lib/Mvm/Runtime/Object.cpp
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp?rev=72550&r1=72549&r2=72550&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.cpp Thu May 28 17:23:38 2009
@@ -97,12 +97,6 @@
GCChunkNode *next = 0;
for(cur=finalizable.next(); cur!=&finalizable; cur=next) {
//printf(" !!!! reject %p [%p]\n", cur->chunk()->_2gc(), cur);
- gcRoot *res = cur->chunk()->_2gc();
- VirtualTable* VT = res->getVirtualTable();
- if (VT->operatorDelete) {
- destructor_t dest = (destructor_t)VT->destructor;
- dest(res);
- }
next = cur->next();
allocator->reject_chunk(cur);
}
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h?rev=72550&r1=72549&r2=72550&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h Thu May 28 17:23:38 2009
@@ -210,8 +210,7 @@
unlock();
- // Having an operatorDelete means being a C++ object.
- if (vt->destructor && !vt->operatorDelete) {
+ if (vt->destructor) {
mvm::Thread::get()->MyVM->addFinalizationCandidate((gc*)p->_2gc());
}
Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=72550&r1=72549&r2=72550&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Thu May 28 17:23:38 2009
@@ -137,7 +137,13 @@
if (!res) break;
try {
- vm->invokeFinalizer(res);
+ VirtualTable* VT = res->getVirtualTable();
+ if (VT->operatorDelete) {
+ destructor_t dest = (destructor_t)VT->destructor;
+ dest(res);
+ } else {
+ vm->invokeFinalizer(res);
+ }
} catch(...) {
}
th->clearException();
More information about the vmkit-commits
mailing list