[vmkit-commits] [vmkit] r145205 - in /vmkit/trunk: include/vmkit/ObjectLocks.h lib/vmkit/CommonThread/ObjectLocks.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Nov 27 14:34:51 PST 2011


Author: geoffray
Date: Sun Nov 27 16:34:51 2011
New Revision: 145205

URL: http://llvm.org/viewvc/llvm-project?rev=145205&view=rev
Log:
Put write barriers on FatLock.


Modified:
    vmkit/trunk/include/vmkit/ObjectLocks.h
    vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp

Modified: vmkit/trunk/include/vmkit/ObjectLocks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/ObjectLocks.h?rev=145205&r1=145204&r2=145205&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/ObjectLocks.h (original)
+++ vmkit/trunk/include/vmkit/ObjectLocks.h Sun Nov 27 16:34:51 2011
@@ -84,6 +84,7 @@
   void release(gc* object, LockSystem& table);
   vmkit::Thread* getOwner();
   bool owner();
+  void setAssociatedObject(gc* obj);
   gc* getAssociatedObject() { return associatedObject; }
   gc** getAssociatedObjectPtr() { return &associatedObject; }
 

Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=145205&r1=145204&r2=145205&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Sun Nov 27 16:34:51 2011
@@ -261,7 +261,7 @@
   assert(a != NULL);
   firstThread = NULL;
   index = i;
-  associatedObject = a;
+  setAssociatedObject(a);
   waitingThreads = 0;
   lockingThreads = 0;
   nextFreeLock = NULL;
@@ -338,7 +338,7 @@
     res->nextFreeLock = 0;
     assert(res->associatedObject == NULL);
     threadLock.unlock();
-    res->associatedObject = obj;
+    res->setAssociatedObject(obj);
   } else { 
     // Get an index.
     uint32_t index = currentIndex++;
@@ -538,4 +538,9 @@
   assert(vmkit::ThinLock::owner(self, table) && "Not owner after notifyAll");
 }
 
+void FatLock::setAssociatedObject(gc* obj) {
+  llvm_gcroot(obj, 0);
+  vmkit::Collector::objectReferenceNonHeapWriteBarrier((gc**)&associatedObject, (gc*)obj);
+}
+
 }





More information about the vmkit-commits mailing list