[vmkit-commits] [vmkit] r180489 - 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:25 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:15:55 2013
New Revision: 180489

URL: http://llvm.org/viewvc/llvm-project?rev=180489&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 91cd52356c1521373a09cda9ea65e3c637092f4f)

Modified:
    vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp

Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180489&r1=180488&r2=180489&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 12:15:55 2013
@@ -322,6 +322,7 @@ public:
 StackThreadManager TheStackManager;
 
 extern void sigsegvHandler(int, siginfo_t*, void*);
+extern void sigsTermHandler(int n, siginfo_t *info, void *context);
 
 /// internalThreadStart - The initial function called by a thread. Sets some
 /// thread specific data, registers the thread to the GC and calls the
@@ -347,6 +348,18 @@ void Thread::internalThreadStart(vmkit::
   sa.sa_sigaction = sigsegvHandler;
   sigaction(SIGSEGV, &sa, NULL);
   sigaction(SIGBUS, &sa, NULL);
+  // to handle termination
+  st.ss_sp = (void*)th->GetAlternativeStackEnd();
+  st.ss_flags = 0;
+  st.ss_size = System::GetAlternativeStackSize();
+  sigaltstack(&st, NULL);
+  sigfillset(&mask);
+  sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
+  sa.sa_mask = mask;
+  sa.sa_sigaction = sigsTermHandler;
+  sigaction(SIGHUP, &sa, NULL);
+  sigaction(SIGINT, &sa, NULL);
+  //sigaction(SIGTERM, &sa, NULL);
 
   assert(th->MyVM && "VM not set in a thread");
   th->MyVM->rendezvous.addThread(th);





More information about the vmkit-commits mailing list