[vmkit-commits] [vmkit] r60350 - in /vmkit/trunk: include/mvm/VirtualMachine.h lib/JnJVM/VMCore/JavaThread.cpp lib/JnJVM/VMCore/JavaThread.h lib/JnJVM/VMCore/Jnjvm.cpp lib/JnJVM/VMCore/Jnjvm.h lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/Mvm/GCMmap2/gccollector.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Dec 1 04:30:07 PST 2008
Author: geoffray
Date: Mon Dec 1 06:30:05 2008
New Revision: 60350
URL: http://llvm.org/viewvc/llvm-project?rev=60350&view=rev
Log:
More fixes for SERVICE execution.
Modified:
vmkit/trunk/include/mvm/VirtualMachine.h
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=60350&r1=60349&r2=60350&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Mon Dec 1 06:30:05 2008
@@ -56,7 +56,10 @@
uint64_t executionTime;
uint64_t numThreads;
CompilationUnit* CU;
- void stopService();
+ virtual void stopService() {}
+
+ uint64_t memoryLimit;
+ uint64_t executionLimit;
#endif
mvm::Allocator gcAllocator;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=60350&r1=60349&r2=60350&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Mon Dec 1 06:30:05 2008
@@ -16,6 +16,7 @@
#include "JavaJIT.h"
#include "JavaObject.h"
#include "JavaThread.h"
+#include "JavaUpcalls.h"
#include "Jnjvm.h"
@@ -37,6 +38,11 @@
interruptFlag = 0;
state = StateRunning;
pendingException = 0;
+#ifdef SERVICE
+ if (isolate->upcalls->newThrowable) {
+ ServiceException = isolate->upcalls->newThrowable->doNew(isolate);
+ }
+#endif
}
JavaThread::~JavaThread() {}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=60350&r1=60349&r2=60350&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Mon Dec 1 06:30:05 2008
@@ -105,6 +105,10 @@
print(buf);
return buf->contents()->cString();
}
+
+#ifdef SERVICE
+ JavaObject* ServiceException;
+#endif
private:
virtual void internalClearException() {
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=60350&r1=60349&r2=60350&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Mon Dec 1 06:30:05 2008
@@ -751,10 +751,12 @@
upcalls->newString->resolveClass();
void* stringVT = ((void*)upcalls->newString->getVirtualVT());
uint32 size = upcalls->newString->virtualTableSize * sizeof(void*);
- JavaString::internStringVT = bootstrapLoader->allocator.Allocate(size);
- memcpy(JavaString::internStringVT, stringVT, size);
- ((void**)(JavaString::internStringVT))[VT_DESTRUCTOR_OFFSET] =
- (void*)(uintptr_t)JavaString::stringDestructor;
+ if (!JavaString::internStringVT) {
+ JavaString::internStringVT = bootstrapLoader->allocator.Allocate(size);
+ memcpy(JavaString::internStringVT, stringVT, size);
+ ((void**)(JavaString::internStringVT))[VT_DESTRUCTOR_OFFSET] =
+ (void*)(uintptr_t)JavaString::stringDestructor;
+ }
upcalls->newString->initialiseClass(this);
// To make classes non GC-allocated, we have to bypass the tracer
@@ -888,6 +890,10 @@
vm->loadBootstrap();
+#ifdef SERVICE
+ thread->ServiceException = vm->upcalls->newThrowable->doNew(vm);
+#endif
+
ClArgumentsInfo& info = vm->argumentsInfo;
if (info.agents.size()) {
@@ -920,7 +926,7 @@
#include <signal.h>
-extern void terminationHandler(int, siginfo_t*, void*);
+extern void terminationHandler(int);
static void serviceCPUMonitor(mvm::Thread* th) {
while (true) {
@@ -944,16 +950,22 @@
argumentsInfo.argv = argumentsInfo.argv + pos - 1;
argumentsInfo.argc = argumentsInfo.argc - pos + 1;
-
- bootstrapThread = new JavaThread(0, 0, this);
- bootstrapThread->start((void (*)(mvm::Thread*))mainJavaStart);
#ifdef SERVICE
- mvm::Thread* th = new JavaThread(0, 0, this);
- th->start(serviceCPUMonitor);
struct sigaction sa;
- sa.sa_sigaction = terminationHandler;
+ sigset_t mask;
+ sigfillset(&mask);
+ sigaction(SIGUSR1, 0, &sa);
+ sa.sa_mask = mask;
+ sa.sa_handler = terminationHandler;
+ sa.sa_flags |= SA_RESTART;
sigaction(SIGUSR1, &sa, NULL);
+
+ mvm::Thread* th = new JavaThread(0, 0, this);
+ th->start(serviceCPUMonitor);
#endif
+
+ bootstrapThread = new JavaThread(0, 0, this);
+ bootstrapThread->start((void (*)(mvm::Thread*))mainJavaStart);
} else {
threadSystem.nonDaemonThreads = 0;
}
@@ -986,6 +998,11 @@
IsolateLock.unlock();
#endif
+#ifdef SERVICE
+ memoryLimit = ~0;
+ executionLimit = ~0;
+#endif
+
}
Jnjvm::~Jnjvm() {
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=60350&r1=60349&r2=60350&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Mon Dec 1 06:30:05 2008
@@ -332,6 +332,10 @@
static mvm::LockNormal IsolateLock;
#endif
+#ifdef SERVICE
+ virtual void stopService();
+#endif
+
};
} // end namespace jnjvm
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=60350&r1=60349&r2=60350&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Mon Dec 1 06:30:05 2008
@@ -254,6 +254,7 @@
/// a new one each time a class loader is allocated.
if (isolate->appClassLoader) {
isolate = gc_new(Jnjvm)(bootstrapLoader);
+ isolate->memoryLimit = 4000000;
isolate->CU = this;
mvm::Thread* th = mvm::Thread::get();
mvm::VirtualMachine* OldVM = th->MyVM;
Modified: vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h?rev=60350&r1=60349&r2=60350&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gccollector.h Mon Dec 1 06:30:05 2008
@@ -157,7 +157,19 @@
#endif
collect_unprotect();
}
-
+
+#ifdef SERVICE
+ if (threads->get_nb_threads()) {
+ VirtualMachine* vm = mvm::Thread::get()->MyVM;
+ if (vm->memoryUsed + n > vm->memoryLimit) {
+ fprintf(stderr, "Limite atteinte, tue le bundle\n");
+ unlock();
+ vm->stopService();
+ return 0;
+ }
+ }
+#endif
+
register GCChunkNode *header = allocator->alloc_chunk(n, 1, current_mark & 1);
#ifdef SERVICE
if (threads->get_nb_threads()) {
More information about the vmkit-commits
mailing list