File tree Expand file tree Collapse file tree 3 files changed +7
-4
lines changed
java/org/truffleruby/core Expand file tree Collapse file tree 3 files changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -6,4 +6,3 @@ slow:Signal.trap the special EXIT signal code can unset the handler
6
6
slow:Signal.trap returns 'DEFAULT' for the initial SIGINT handler
7
7
slow:Signal.trap accepts 'SYSTEM_DEFAULT' and uses the OS handler for SIGPIPE
8
8
slow:Signal.trap allows to register a handler for all known signals, except reserved signals for which it raises ArgumentError
9
- fails:Signal.trap registers an handler doing nothing with :IGNORE
Original file line number Diff line number Diff line change 17
17
import org .truffleruby .builtins .CoreClass ;
18
18
import org .truffleruby .builtins .Primitive ;
19
19
import org .truffleruby .builtins .PrimitiveArrayArgumentsNode ;
20
- import org .truffleruby .language .control .RaiseException ;
21
20
import sun .misc .Signal ;
22
21
23
22
@ CoreClass ("Process" )
@@ -54,7 +53,8 @@ public int raise(DynamicObject signalName) {
54
53
try {
55
54
Signal .raise (signal );
56
55
} catch (IllegalArgumentException e ) {
57
- throw new RaiseException (getContext (), coreExceptions ().argumentError (e .getMessage (), this ));
56
+ // Java does not know the handler, fallback to using kill()
57
+ return -1 ;
58
58
}
59
59
return 1 ;
60
60
}
Original file line number Diff line number Diff line change @@ -376,7 +376,11 @@ def self.kill(signal, *pids)
376
376
377
377
if pid == Process . pid && signal != 0
378
378
signal_name = Signal ::Numbers [ signal ] . to_sym
379
- Truffle . invoke_primitive :process_kill_raise , signal_name
379
+ result = Truffle . invoke_primitive :process_kill_raise , signal_name
380
+ if result == -1 # Try kill() if the java Signal.raise() failed
381
+ result = Truffle ::POSIX . kill ( pid , signal )
382
+ Errno . handle if result == -1
383
+ end
380
384
else
381
385
pid = -pid if use_process_group
382
386
result = Truffle ::POSIX . kill ( pid , signal )
You can’t perform that action at this time.
0 commit comments