RFR: 6536943: Bogus -Xcheck:jni warning for SIG_INT action for SIGINT in JVM started from non-interactive shell
Yumin Qi
yumin.qi at oracle.com
Fri Mar 14 16:27:50 UTC 2014
Dmitry,
case INTERRUPT_SIGNAL:
jvmHandler = CAST_FROM_FN_PTR(address, SIG_DFL);
break;
Do you mean we use
if (isatty(fileno(stdin)))
jvmHandler = CAST_FROM_FN_PTR(address, SIG_DFL);
else
jvmHandler = CAST_FROM_FN_PTR(address, SIG_IGN);
I think this will solve the problem. Need more opinions.
Under redirecting, isatty still can correctly tests for non-interactive
shell, please check bug comments.
Thanks
Yumin
On 3/14/2014 9:05 AM, Dmitry Samersoff wrote:
> Yumin.
>
> I find the only place per os_*.cpp where we check for SIGINT
>
> os/linux/vm/os_linux.cpp
>
> 4498: DO_SIGNAL_CHECK(INTERRUPT_SIGNAL);
>
> so it might make sense to place it under
>
> if isatty() {}
>
> rather than change macro.
>
> Also isatty() call is expensive and will not give you expected result if
> stdin is redirected (e.g. by custom launcher)
>
>
> I think it's safe to check whether the handler for SIGINT is SIG_IGN
> and skip the check in this case.
>
> -Dmitry
>
>
> On 2014-03-14 08:18, Yumin Qi wrote:
>> Have changed, new URL at:
>> http://cr.openjdk.java.net/~minqi/6536943/webrev02
>>
>> Thanks
>> Yumin
>>
>> On 3/13/2014 4:10 PM, Yumin Qi wrote:
>>> Thanks for review. I will change the order.
>>>
>>> Yumin
>>>
>>> On 3/13/2014 3:28 PM, Dean Long wrote:
>>>> (isatty(fileno(stdin)) || sig != SIGINT)
>>>>
>>>> You might want to reverse that:
>>>>
>>>> (sig != SIGINT || isatty(fileno(stdin)))
>>>>
>>>> because isatty() could be expensive.
>>>>
>>>> dl
>>>>
>>>>
>>>> On 3/13/2014 2:27 PM, Yumin Qi wrote:
>>>>> David and all,
>>>>>
>>>>> I have changed to skip SIGINT only if run in a non-interactive
>>>>> shell. Please check webrev:
>>>>>
>>>>> http://cr.openjdk.java.net/~minqi/6536943/webrev01/
>>>>>
>>>>> Thanks
>>>>> Yumin
>>>>>
>>>>> On 3/13/2014 8:19 AM, Yumin Qi wrote:
>>>>>> On 3/12/2014 10:08 PM, David Holmes wrote:
>>>>>>> Hi Yumin,
>>>>>>>
>>>>>>> Not sure that disabling all signal checks because there is a
>>>>>>> problem with one signal is the right solution for this.
>>>>>>>
>>>>>> Or we check if the signal is SIGINT --- skip it only.
>>>>>>
>>>>>> Thanks
>>>>>> Yumin
>>>>>>> That said I don't know what utility the signal checks provide in
>>>>>>> the first place. Can anyone comment on that?
>>>>>>>
>>>>>>> David
>>>>>>>
>>>>>>> On 13/03/2014 9:55 AM, Yumin Qi wrote:
>>>>>>>> Forget to mention tests:
>>>>>>>> JPRT test;
>>>>>>>> manually testing on Java2Demo, for both shell and non-interactive
>>>>>>>> shell.
>>>>>>>>
>>>>>>>> This is only disabling checking signal handlers under
>>>>>>>> non-interactive
>>>>>>>> shell, so no need to test more.
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Yumin
>>>>>>>>
>>>>>>>> On 3/12/2014 2:52 PM, Yumin Qi wrote:
>>>>>>>>> Hi, Can I have your codereview for this simple change:
>>>>>>>>>
>>>>>>>>> http://cr.openjdk.java.net/~minqi/6536943/webrev00/
>>>>>>>>>
>>>>>>>>> Summary: Under non-interactive shell, -Xcheck:jni output
>>>>>>>>> warning for
>>>>>>>>> SIGINT, since non-interactive shells set SIGINT to SIG_IGN as
>>>>>>>>> part of
>>>>>>>>> the job control features. The fix is that don't check signal
>>>>>>>>> handlers
>>>>>>>>> if java run in a non-interactive shell. This applies to all
>>>>>>>>> platforms
>>>>>>>>> except for Windows.
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>> Yumin
>
More information about the hotspot-runtime-dev
mailing list