[vmkit-commits] [vmkit] r84630 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaLocks.cpp Jnjvm.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Oct 20 02:33:21 PDT 2009
Author: geoffray
Date: Tue Oct 20 04:33:19 2009
New Revision: 84630
URL: http://llvm.org/viewvc/llvm-project?rev=84630&view=rev
Log:
Modularize.
Added:
vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp
Modified:
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
Added: vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp?rev=84630&view=auto
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp (added)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp Tue Oct 20 04:33:19 2009
@@ -0,0 +1,99 @@
+//===------------- JavaLocks.cpp - Fat lock management --------------------===//
+//
+// The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "JavaLocks.h"
+#include "JavaThread.h"
+#include "Jnjvm.h"
+
+using namespace jnjvm;
+
+JavaLock* JavaLock::allocate(JavaObject* obj) {
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ JavaLock* res = vm->lockSystem.allocate(obj);
+ return res;
+}
+
+void JavaLock::deallocate() {
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ vm->lockSystem.deallocate(this);
+}
+
+JavaLock* LockSystem::allocate(JavaObject* obj) {
+
+ JavaLock* res = 0;
+ threadLock.lock();
+
+ // Try the freeLock list.
+ if (freeLock) {
+ res = freeLock;
+ freeLock = res->nextFreeLock;
+ res->nextFreeLock = 0;
+ threadLock.unlock();
+ res->associatedObject = obj;
+ } else {
+ // Get an index.
+ uint32_t index = currentIndex++;
+ if (index == MaxLocks) {
+ fprintf(stderr, "Ran out of space for allocating locks");
+ abort();
+ }
+
+ JavaLock** tab = LockTable[index >> BitIndex];
+
+ if (tab == NULL)
+ tab = (JavaLock**)associatedVM->allocator.Allocate(IndexSize,
+ "Index LockTable");
+ threadLock.unlock();
+
+ // Allocate the lock.
+ res = new(associatedVM->allocator, "Lock") JavaLock(index, obj);
+
+ // Add the lock to the table.
+ uint32_t internalIndex = index & BitMask;
+ tab[internalIndex] = res;
+ }
+
+ // Return the lock.
+ return res;
+}
+
+LockSystem::LockSystem(Jnjvm* vm) {
+ associatedVM = vm;
+ LockTable = (JavaLock* **)
+ vm->allocator.Allocate(GlobalSize, "Global LockTable");
+ LockTable[0] = (JavaLock**)
+ vm->allocator.Allocate(IndexSize, "Index LockTable");
+ currentIndex = 0;
+}
+
+uintptr_t JavaLock::getID() {
+ return index | mvm::FatMask;
+}
+
+JavaLock* JavaLock::getFromID(uintptr_t ID) {
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ if (ID & mvm::FatMask) {
+ JavaLock* res = vm->lockSystem.getLock(ID & ~mvm::FatMask);
+ return res;
+ } else {
+ return 0;
+ }
+}
+
+void JavaLock::release(JavaObject* obj) {
+ assert(associatedObject == obj && "Mismatch object in lock");
+ llvm_gcroot(obj, 0);
+ if (!waitingThreads && !lockingThreads &&
+ internalLock.recursionCount() == 1) {
+ assert(associatedObject && "No associated object when releasing");
+ associatedObject->lock.initialise();
+ deallocate();
+ }
+ internalLock.unlock();
+}
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=84630&r1=84629&r2=84630&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Oct 20 04:33:19 2009
@@ -1389,89 +1389,3 @@
return 0;
}
-
-
-JavaLock* JavaLock::allocate(JavaObject* obj) {
- Jnjvm* vm = JavaThread::get()->getJVM();
- JavaLock* res = vm->lockSystem.allocate(obj);
- return res;
-}
-
-void JavaLock::deallocate() {
- Jnjvm* vm = JavaThread::get()->getJVM();
- vm->lockSystem.deallocate(this);
-}
-
-JavaLock* LockSystem::allocate(JavaObject* obj) {
-
- JavaLock* res = 0;
- threadLock.lock();
-
- // Try the freeLock list.
- if (freeLock) {
- res = freeLock;
- freeLock = res->nextFreeLock;
- res->nextFreeLock = 0;
- threadLock.unlock();
- res->associatedObject = obj;
- } else {
- // Get an index.
- uint32_t index = currentIndex++;
- if (index == MaxLocks) {
- fprintf(stderr, "Ran out of space for allocating locks");
- abort();
- }
-
- JavaLock** tab = LockTable[index >> BitIndex];
-
- if (tab == NULL)
- tab = (JavaLock**)associatedVM->allocator.Allocate(IndexSize,
- "Index LockTable");
- threadLock.unlock();
-
- // Allocate the lock.
- res = new(associatedVM->allocator, "Lock") JavaLock(index, obj);
-
- // Add the lock to the table.
- uint32_t internalIndex = index & BitMask;
- tab[internalIndex] = res;
- }
-
- // Return the lock.
- return res;
-}
-
-LockSystem::LockSystem(Jnjvm* vm) {
- associatedVM = vm;
- LockTable = (JavaLock* **)
- vm->allocator.Allocate(GlobalSize, "Global LockTable");
- LockTable[0] = (JavaLock**)
- vm->allocator.Allocate(IndexSize, "Index LockTable");
- currentIndex = 0;
-}
-
-uintptr_t JavaLock::getID() {
- return index | mvm::FatMask;
-}
-
-JavaLock* JavaLock::getFromID(uintptr_t ID) {
- Jnjvm* vm = JavaThread::get()->getJVM();
- if (ID & mvm::FatMask) {
- JavaLock* res = vm->lockSystem.getLock(ID & ~mvm::FatMask);
- return res;
- } else {
- return 0;
- }
-}
-
-void JavaLock::release(JavaObject* obj) {
- assert(associatedObject == obj && "Mismatch object in lock");
- llvm_gcroot(obj, 0);
- if (!waitingThreads && !lockingThreads &&
- internalLock.recursionCount() == 1) {
- assert(associatedObject && "No associated object when releasing");
- associatedObject->lock.initialise();
- deallocate();
- }
- internalLock.unlock();
-}
More information about the vmkit-commits
mailing list