[vmkit-commits] [vmkit] r180491 - Working on capturing some signals like SIGTERM and so on. This is important because some Java applications perform actions to properly exit.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:17:38 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:16:08 2013
New Revision: 180491

URL: http://llvm.org/viewvc/llvm-project?rev=180491&view=rev
Log:
Working on capturing some signals like SIGTERM and so on. This is important because some Java applications perform actions to  properly exit.
(cherry picked from commit 9d26440da4b538c3e5b7fc34b993942b04f37a7e)

Modified:
    vmkit/trunk/include/vmkit/Thread.h
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h
    vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp

Modified: vmkit/trunk/include/vmkit/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Thread.h?rev=180491&r1=180490&r2=180491&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/Thread.h (original)
+++ vmkit/trunk/include/vmkit/Thread.h Thu Apr 25 12:16:08 2013
@@ -145,6 +145,7 @@ public:
 
   static Thread* getByID(uint64_t threadID) {return (Thread*)threadID;}
 
+  virtual void onVMTermination()	{ fprintf(stderr, "\njajajaj\n"); }
 public:
 
   /// IsolateID - The Isolate ID of the thread's VM.

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=180491&r1=180490&r2=180491&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Apr 25 12:16:08 2013
@@ -209,6 +209,7 @@ JavaMethod* Classpath::FinalizeObject;
 JavaMethod* Classpath::IntToString;
 
 JavaMethod* Classpath::SystemArraycopy;
+JavaMethod* Classpath::SystemExit;
 JavaMethod* Classpath::VMSystemArraycopy;
 Class*      Classpath::SystemClass;
 Class*      Classpath::EnumClass;
@@ -912,6 +913,9 @@ void Classpath::initialiseClasspath(Jnjv
                                   "(Ljava/lang/Object;ILjava/lang/Object;II)V",
                                   ACC_STATIC);
   
+  SystemExit = UPCALL_METHOD(loader, "java/lang/System", "exit",
+          "(I)V", ACC_STATIC);
+
   VMSystemArraycopy = UPCALL_METHOD(loader, "java/lang/VMSystem", "arraycopy",
                                   "(Ljava/lang/Object;ILjava/lang/Object;II)V",
                                   ACC_STATIC);

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h?rev=180491&r1=180490&r2=180491&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h Thu Apr 25 12:16:08 2013
@@ -243,6 +243,7 @@ public:
   ISOLATE_STATIC JavaMethod* InitCloneNotSupportedException;
   
   ISOLATE_STATIC JavaMethod* SystemArraycopy;
+  ISOLATE_STATIC JavaMethod* SystemExit;
   ISOLATE_STATIC JavaMethod* VMSystemArraycopy;
   ISOLATE_STATIC Class*      SystemClass;
   

Modified: vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp?rev=180491&r1=180490&r2=180491&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/Sigsegv.cpp Thu Apr 25 12:16:08 2013
@@ -94,3 +94,10 @@ void sigsegvHandler(int n, siginfo_t *in
     }
   }
 }
+
+void sigsTermHandler(int n, siginfo_t *info, void *context) {
+	fprintf(stderr, "\nJVM termination because user request\n");
+	Thread::get()->onVMTermination();
+	//UserClass* cl = vm->upcalls->SystemClass;
+	//vm -> upcalls->SystemExit->invokeIntStatic(vm,Class* cl, 0);
+}





More information about the vmkit-commits mailing list