[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