On Mon, 31 Jan 2022 22:12:30 GMT, David Holmes <david.hol...@oracle.com> wrote:
> > That's a valid concern. I've also asked myself this question when I had > > initially started using some assertions. We should not crash again during > > error reporting. I've therefore tried to be as conservative as possible and > > added bailouts instead, also in loops when reading data. But of course, > > this is just a best effort and by no means a guarantee to be safe > > (especially in terms of crashes). What could be alternatives to make this > > better? > > If the parsing code turns out to be very problematic in a signal handling > context, then we could disable it in that context. So we really want to try > and do a lot of testing by throwing random signals at the VM and see what > breaks. > Source information in hs-err file stacks can be tremendously useful. Lets try the retry-callstack-dumping without features idea in case of a secondary crash, outlined above, first. > > > Secondly, on the same issue the use of unified logging within this code > > > seems even more likely to be problematic - I'm not aware of us currently > > > using UL during error reporting. It may work in basic usecases but if it > > > triggers logfile rotation or other more complex actions what then? > > > > > > I haven't thought about this before. To be honest, I think UL printing of > > the `dwarf` tag is only useful during development when adding something new > > to the parser or when debugging. I don't see much value of these messages > > otherwise - even less for a Java user. As a first step, I could change the > > logs from `log_X()` to `log_develop_X()` but that just shifts the problem > > to non-product builds. Another option (or additional thing) could be to > > guard the log messages with a new develop flag that's disabled by default. > > By setting it for development, we accept that it might be unsafe which > > should be fine. > > I think changing the logging to develop only is a reasonable step. I don't > see logging of crash handling / error reporting as generally useful for the > end user. I think the right way to go longterm would be to give us a minimalistic safe logging API for these cases (signal handling, pre-initialization) or make UL safe to use always. ------------- PR: https://git.openjdk.java.net/jdk/pull/7126