RFR: 8145073: Filename and linenumber are not printed for assers any more.

David Lindholm david.lindholm at oracle.com
Thu Dec 10 12:08:53 UTC 2015


David, Thomas,

I would also like to restore the old behavior for now, and thereby 
fixing this regression. We can change these APIs later.


Thanks
David L

On 2015-12-10 13:01, David Holmes wrote:
> Hi Thomas,
>
> On 10/12/2015 8:35 PM, Thomas Stüfe wrote:
>> Hi David, David,
>>
>> sorry about that and thank you for fixing!
>>
>> I changed that behaviour (inconsequentially, because I left out windows
>> and left the comment in) because the return code for
>> os::exception_name() is used in a number of places as input for
>> printing, without doing a null check first:
>>
>> e.g os_solaris_x86.cpp:
>>
>> 364        warning("Ignoring %s - see 4229104 or 6499219",
>> 365                os::exception_name(sig, buf, sizeof(buf)));
>
> But here sig is known to be SIGPIPE or SIGXFSZ so exception_name can 
> never return NULL.
>
>> e.g. os_solaris.cpp
>>
>> st->print("%s: ", os::exception_name(sig, buf, buflen));
>
> This is in print_signal_handler so sig will always be a signal value - 
> so again NULL is not possible.
>
>> So, I think it is besser to never return NULL at all. But if we go back
>> to the old behaviour, we should fix those callsites and add NULL checks
>> to them.
>
> I don't like the way NULL is used to indicate "hey you didn't really 
> pass me a signal number!". The _id in VMError is defined:
>
>   static int         _id;               // Solaris/Linux signals: 0 - 
> SIGRTMAX
>                                         // Windows exceptions: 
> 0xCxxxxxxx system errors
>                                         // 0x8xxxxxxx system warnings
>
> nothing there about assertions! But in fact it can have a range of 
> non-signal related values and primarily of interest in this case 
> INTERNAL_ERROR (0xe0000000). So while I don't like the way this is 
> managed, restoring the NULL behaviour is a lot simpler than trying to 
> rework everything.
>
> Thanks,
> David H.
> -------
>
>> Kind regards, Thomas
>>
>>
>>
>> On Thu, Dec 10, 2015 at 11:26 AM, David Holmes <david.holmes at oracle.com
>> <mailto:david.holmes at oracle.com>> wrote:
>>
>>     Hi David,
>>
>>     On 10/12/2015 6:21 PM, David Lindholm wrote:
>>
>>         Hello Runtime,
>>
>>         Please review this patch that fixes the posix version of
>>         os::exception_name(). The problem is that this function in a 
>> recent
>>         change started returning a string saying "invalid (<num>)"
>>         instead of
>>         NULL for invalid exception numbers, breaking the API. Accoring
>>         to os.hpp
>>         the API is still:
>>
>>             // returns a string to describe the exception/signal;
>>             // returns NULL if exception_code is not an OS 
>> exception/signal.
>>
>>         .. and this is also what windows does. This change in return
>>         value for
>>         the posix version makes the NULL-checks for calls to this
>>         function in
>>         vmError.cpp invalid, leading to that we don't get filename and
>>         linenumber printed in the hs_err file for asserts (for example).
>>
>>         Bug: https://bugs.openjdk.java.net/browse/JDK-8145073
>>         Webrev: http://cr.openjdk.java.net/~david/JDK-8145073/webrev.00/
>>
>>
>>     Sorry about that. I worked with Thomas on his change in this area. I
>>     hadn't realized something was explicitly treating a NULL return to
>>     mean "not really a signal/exception" :(
>>
>>     Your fix to restore this behaviour looks good.
>>
>>     Thanks,
>>     David H.
>>
>>
>>         Testing: JPRT.
>>
>>
>>         Thanks,
>>         David
>>
>>
>>



More information about the hotspot-runtime-dev mailing list