> On Feb 1, 2016, at 1:25 PM, Roger Riggs <roger.ri...@oracle.com> wrote:
> 
> Hi Gerard,
> 
> On 2/1/2016 1:58 PM, Gerard Ziemski wrote:
>> hi Roger,
>> 
>> I love that we are adding this Signal object. I have several questions, but 
>> please do not take them as criticism, I’m just seeking clarification and 
>> providing feedback:
>> 
>> 
>> #1 Re: "Consumers for signals that are unknown or reserved by the Java 
>> implementation can not be registered.”
>> 
>> - Why don't we want to allow unknown signals? This will make us have to 
>> update our implementation if we want to support new or platform specific 
>> signals in the future. 
>> 
>> 
> The statement was aimed primarily at the Java Signal API; there is quite a 
> bit of detail
> oriented code in the VM to initialize and handle signals. Most of it is 
> agnostic to the signal number
> and would just pass it through.  If a signal is not supported by the OS 
> (think SIGHUP on Windows)
> that should bubble up as being not available.  The 'cannot be registered' 
> might be re-worded to say
> it throws an exception, as the method javadoc does.
> 
> The set of signals is a pretty slow moving target so updating implementations 
> should not be a big issue.

Right, but you don’t actually answer why we don’t allow unknown (to us at the 
moment) signals. Why have a limit in place, unless there is a good reason?


>> #2 Re: "java.util.Signal.raise()”
>> 
>> - That API raises the signal in the current process, but what about sending 
>> a signal to another process for interprocess communication?
>> 
> I left that for a separate issue but would be a straight-forward addition to 
> java.lang.ProcessHandle/Process.

The proposed Signal “feels” incomplete to me without this, though I understand 
that it meets the original goal. I would love to see at the very least a 
followup enhancement filed to address this.


>> 
>> 
>> #3 Re: "Signal.of("SIGINT”)”
>> 
>> - Is this a factory method that returns the same object if called more than 
>> once?
>> 
> Maybe, maybe not, why would it matter.  
> The real state is encapsulate is in the SignalImpl instances which are 
> singletons per signal.
> I was trying to keep the Signal object stateless to allow it to be a 
> value-type and lighter weight
> some day.

If it doesn’t matter, the why not just use constructor “Signal signal = new 
Signal(“SIGINT”)” ?


>> 
>> 
>> #4 Re: "public boolean unregister(Consumer<Signal> consumer)”
>> 
>> - Why is this API returning a value? Wouldn’t having a Signal API like 
>> “public Consumer<Signal> getConsumer()” be more flexible?
>> 
> 
> The return value reports whether it unregistered the specific consumer.  If 
> it was not
> the concurrently registered the caller might want to know it was currently 
> registered.
> I expect the return would mostly be ignored. 
> 
> The getConsumer()/unregister consumer pair would be vulnerable to race 
> conditions
> and require some external locking to get predictable behavior.  

Isn’t it also true for register/unregister?

> 
>> 
>> 
>> #5 Re: "public void registerDefault(Consumer<Signal> consumer)”
>> 
>> - Do we really need this API? Can’t the same be achieved with the plain 
>> vanilla “public void register(Consumer<Signal> consumer)” I guess I don’t 
>> really see what makes this API special.
>> 
> The java runtime currently registers termination handler to cleanly shutdown 
> if someone types control-c.
> It is useful to be able to remove the application provided signal handler and 
> be able to restore the
> system defaults.
> This API could be hidden as a pure implementation detail.  So unregistering 
> the signal handler
> would always restore the appropriate system ones.

I was hoping that behavior is all that’s needed.


> 
> Thanks for the review and comments, Roger

Thanks for all the work!


> 
>> 
>> 
>> cheers
>> 
>> 
>>> On Feb 1, 2016, at 10:02 AM, Roger Riggs <roger.ri...@oracle.com>
>>>  wrote:
>>> 
>>> Please review an API addition to handle signals such as SIGINT, SIGHUP, and 
>>> SIGTERM.
>>> This JEP 260 motivated alternative to sun.misc.Signal supports the use case 
>>> for
>>> interactive applications that need to handle Control-C and other signals.
>>> 
>>> The new java.util.Signal class provides a settable primary signal handler 
>>> and a default
>>> signal handler.  The primary signal handler can be unregistered and 
>>> handling is restored
>>> to the default signal handler.  System initialization registers default 
>>> signal handlers
>>> to terminate on SIGINT, SIGHUP, and SIGTERM.  Use of the Signal API requires
>>> a permission if a SecurityManager is set.
>>> 
>>> The sun.misc.Signal implementation is modified to be layered on a common
>>> thread and dispatch mechanism. The VM handling of native signals is not 
>>> affected.
>>> The command option to reduce signal use by the runtime with -Xrs is 
>>> unmodified.
>>> 
>>> The changes to hotspot are minimal to rename the hardcoded callback to the 
>>> Java
>>> Signal dispatcher.
>>> 
>>> Please review and comment on the API and implementation.
>>> 
>>> javadoc:
>>>  
>>> http://cr.openjdk.java.net/~rriggs/signal-doc/
>>> 
>>> 
>>> Webrev:
>>> jdk:  
>>> http://cr.openjdk.java.net/~rriggs/webrev-signal-8087286/
>>> 
>>> hotspot: 
>>> http://cr.openjdk.java.net/~rriggs/webrev-hs-signal-8087286/
>>> 
>>> 
>>> Issue:
>>>   
>>> https://bugs.openjdk.java.net/browse/JDK-8087286
>>> 
>>> 
>>> JEP 260:
>>>  
>>> https://bugs.openjdk.java.net/browse/JDK-8132928
>>> 
>>> 
>>> Thanks, Roger
>>> 
>>> 
>>> 
> 

Reply via email to