[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