<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">As part of writing my book on LibreOffice internals, I’m trying to understand why we special case signalling for the JVM. <div class=""><br class=""></div><div class="">We seem to be concerned about wiping out the JVM signal handlers, but any JVM used after v1.4 has the -Xrs switch that allows for signal chaining (see <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/vm/signal-chaining.html" class="">http://docs.oracle.com/javase/7/docs/technotes/guides/vm/signal-chaining.html</a>).</div><div class=""><br class=""></div><div class="">According to the Java documentation:</div><div class=""><p style="margin-top: 3px; margin-bottom: 17px; font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""></p><blockquote type="cite" class=""><p style="margin-top: 3px; margin-bottom: 17px; font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">The signal-chaining facility offers the following:</p><ul style="margin-left: 13px; padding-left: 0px; font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;" class=""><li style="margin-left: 13px; padding-left: 0px; list-style-image: url("../im/ul_bullet.gif");" class="">Support for pre-installed signal handlers when the HotSpot VM is created.</li><li style="margin-left: 13px; padding-left: 0px; list-style-image: url("../im/ul_bullet.gif");" class="">Support for signal handler installation after the HotSpot VM is created, inside JNI code or from another native thread.</li></ul><p style="margin-top: 3px; margin-bottom: 17px; font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">Pre-installed signal handlers (A) are supported by means of saving existing signal handlers, for signals that are used by the VM, when the VM is first created. Later, when any of these signals are raised and found not to be targeted at the Java HotSpot VM, the pre-installed handlers are invoked. In other words, pre-installed handlers are "chained" behind the VM handlers for these signals.</p><p style="margin-top: 3px; margin-bottom: 17px; font-family: Arial, Helvetica, FreeSans, Luxi-sans, 'Nimbus Sans L', sans-serif; font-variant-ligatures: normal; orphans: 2; widows: 2;" class="">The signal-chaining facility also allows an application to link and load a shared library <tt style="font-family: "Courier New", Monaco, Courier, monospace; color: rgb(68, 68, 68);" class="">libjsig.so</tt> before <tt style="font-family: "Courier New", Monaco, Courier, monospace; color: rgb(68, 68, 68);" class="">libc/libthread/libpthread</tt>. This library ensures that calls such as <tt style="font-family: "Courier New", Monaco, Courier, monospace; color: rgb(68, 68, 68);" class="">signal()</tt>, <tt style="font-family: "Courier New", Monaco, Courier, monospace; color: rgb(68, 68, 68);" class="">sigset()</tt>, and<tt style="font-family: "Courier New", Monaco, Courier, monospace; color: rgb(68, 68, 68);" class="">sigaction()</tt> are intercepted so that they do not actually replace the Java HotSpot VM's signal handlers if the handlers conflict with those already installed by the Java HotSpot VM (B). Instead, these calls save the new signal handlers, or "chain" them behind the VM-installed handlers. Later, when any of these signals are raised and found not to be targeted at the Java HotSpot VM, the pre-installed handlers are invoked. <tt style="font-family: "Courier New", Monaco, Courier, monospace; color: rgb(68, 68, 68);" class="">libjsig.so</tt> is not needed if (B) is not required.</p></blockquote><div class="">We seem to jump through all sorts of hoops to implement this functionality, but given the JVM already caters for this, why are we doing this?</div></div><div class=""><br class=""></div><div class="">The issue seems to be in regards to adding crash handling code. </div><div class=""><br class=""></div><div class="">Great to get some feedback on this. I’ve tried a few things, but I must be missing something crucial due to my own lack of experience. I thought I’d take this to the ML rather than constantly harass poor sberg :-)</div><div class=""><br class=""></div><div class="">My Gerrit attempts can be found here:</div><div class=""><br class=""></div><div class="">Attempt 1:</div><div class=""><br class=""></div><div class=""><a href="https://gerrit.libreoffice.org/#/c/38916/3" class="">https://gerrit.libreoffice.org/#/c/38916/3</a></div><div class=""><br class=""></div><div class="">Last attempt:</div><div class=""><br class=""></div><div class=""><a href="https://gerrit.libreoffice.org/#/c/38916/" class="">https://gerrit.libreoffice.org/#/c/38916/</a></div><div class=""><br class=""></div><div class="">Chris</div></body></html>