|
1 /* |
|
2 * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. |
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 * |
|
5 * This code is free software; you can redistribute it and/or modify it |
|
6 * under the terms of the GNU General Public License version 2 only, as |
|
7 * published by the Free Software Foundation. |
|
8 * |
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
|
13 * accompanied this code). |
|
14 * |
|
15 * You should have received a copy of the GNU General Public License version |
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 * |
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
20 * or visit www.oracle.com if you need additional information or have any |
|
21 * questions. |
|
22 * |
|
23 */ |
|
24 |
|
25 #include "precompiled.hpp" |
|
26 #include "prims/jvm.h" |
|
27 #include "runtime/interfaceSupport.hpp" |
|
28 #include "runtime/osThread.hpp" |
|
29 |
|
30 #include <signal.h> |
|
31 |
|
32 JVM_LEAF(void*, JVM_GetThreadInterruptEvent()) |
|
33 return Thread::current()->osthread()->interrupt_event(); |
|
34 JVM_END |
|
35 |
|
36 // sun.misc.Signal /////////////////////////////////////////////////////////// |
|
37 // Signal code is mostly copied from classic vm, signals_md.c 1.4 98/08/23 |
|
38 /* |
|
39 * This function is included primarily as a debugging aid. If Java is |
|
40 * running in a console window, then pressing <CTRL-BREAK> will cause |
|
41 * the current state of all active threads and monitors to be written |
|
42 * to the console window. |
|
43 */ |
|
44 |
|
45 JVM_ENTRY_NO_ENV(void*, JVM_RegisterSignal(jint sig, void* handler)) |
|
46 // Copied from classic vm |
|
47 // signals_md.c 1.4 98/08/23 |
|
48 void* newHandler = handler == (void *)2 |
|
49 ? os::user_handler() |
|
50 : handler; |
|
51 switch (sig) { |
|
52 case SIGFPE: |
|
53 return (void *)-1; /* already used by VM */ |
|
54 case SIGBREAK: |
|
55 if (!ReduceSignalUsage) return (void *)-1; |
|
56 |
|
57 /* The following signals are used for Shutdown Hooks support. However, if |
|
58 ReduceSignalUsage (-Xrs) is set, Shutdown Hooks must be invoked via |
|
59 System.exit(), Java is not allowed to use these signals, and the the |
|
60 user is allowed to set his own _native_ handler for these signals and |
|
61 invoke System.exit() as needed. Terminator.setup() is avoiding |
|
62 registration of these signals when -Xrs is present. */ |
|
63 case SHUTDOWN1_SIGNAL: |
|
64 case SHUTDOWN2_SIGNAL: |
|
65 if (ReduceSignalUsage) return (void*)-1; |
|
66 } |
|
67 |
|
68 void* oldHandler = os::signal(sig, newHandler); |
|
69 if (oldHandler == os::user_handler()) { |
|
70 return (void *)2; |
|
71 } else { |
|
72 return oldHandler; |
|
73 } |
|
74 JVM_END |
|
75 |
|
76 |
|
77 JVM_ENTRY_NO_ENV(jboolean, JVM_RaiseSignal(jint sig)) |
|
78 if (ReduceSignalUsage) { |
|
79 // do not allow SHUTDOWN1_SIGNAL,SHUTDOWN2_SIGNAL,BREAK_SIGNAL |
|
80 // to be raised when ReduceSignalUsage is set, since no handler |
|
81 // for them is actually registered in JVM or via JVM_RegisterSignal. |
|
82 if (sig == SHUTDOWN1_SIGNAL || sig == SHUTDOWN2_SIGNAL || |
|
83 sig == SIGBREAK) { |
|
84 return JNI_FALSE; |
|
85 } |
|
86 } |
|
87 os::signal_raise(sig); |
|
88 return JNI_TRUE; |
|
89 JVM_END |
|
90 |
|
91 |