On Wed, 18 Dec 2024 09:12:55 GMT, Joakim Nordström <jnordst...@openjdk.org> wrote:
> Could I get a review of this fix to refine the warnings printed by `libjsig` > when using the deprecated `signal()`/`sigset()` functions? > > Currently the libjsig library supports chaining `signal()` and `sigset()`. > With these functions being deprecated, `libjsig` warns when a program calls > either function when the it's LD_PRELOADed. The warning is supposed to warn > that when the support for `signal()` and `sigset()` is removed, the > application might stop working as expected. > >> VM warning: the use of signal() and sigset() for signal chaining was >> deprecated in version 16.0 and will be removed in a future release. Use >> sigaction() instead. > > The warning is however printed in a few cases when its unnecessary, and also > fails to catch some usages where it should be printed. With this fix the > warning is printed (in order as they appear in jsig.c): > 1. when `signal()` or `sigset()` is called for a JVM-used signal, after the > JVM has installed its signals > 2. when the JVM installs its signals (using `sigaction()`), and libjsig sees > that `signal()` or `sigset()` has been used for a JVM-used signal > > ### Changes > * The printing is removed from `call_os_signal()`. This warning was only > correct if `signal()` or `sigset()` was called for a JVM-used signal before > the JVM was installed. This is now instead covered by step 1 above. > * If the JVM was installed first, the `signal()`/`sigset()` calls were > effectively translated to `sigaction()`, and the warning was _not_ printed. > When the `signal()`/`sigset()` support is dropped, this behaviour will change > and the warning should be printed. This is now covered by step 2. > > ## Testing > - [x] Test `open/test/hotspot/jtreg/runtime/signal` has added checks for the > deprecation warning, and passes with the fix > - [x] Tier1-3 in progress Thanks for taking this on @jaokim and apologies I did not get to this before the Xmas/NY break. The changes look good and I agree with the updated conditions as to when the deprecation warning is, and isn't, printed. A couple of minor suggestions and a query about the test. Copyright years will need updating to 2025. test/hotspot/jtreg/runtime/signal/SigTestDriver.java line 131: > 129: if (deprecatedSigFunctionUsed && jvmInvolved > && sigUsedByJVM) { > 130: if (!warningPrinted) { > 131: failureMessage = "FAILED Missing > deprecation warning for mode " + mode + Suggestion: failureMessage = "FAILED: Missing deprecation warning for mode " + mode + test/hotspot/jtreg/runtime/signal/SigTestDriver.java line 136: > 134: } > 135: } else if (warningPrinted) { > 136: failureMessage = "FAILED Deprecation > warning shouldn't be printed for mode " + mode + Suggestion: failureMessage = "FAILED: Deprecation warning shouldn't be printed for mode " + mode + test/hotspot/jtreg/runtime/signal/SigTestDriver.java line 176: > 174: /** > 175: * Return true for all signals used by the JVM. This only covers the > 176: * case where the JVM is started normally, and not with -Xrs. The VM also uses SIGUSR2 (`SR_signum`), SIGINT, and SIGQUIT. Though the latter two only if no `-Xrs` is given. ------------- PR Review: https://git.openjdk.org/jdk/pull/22806#pullrequestreview-2531291539 PR Review Comment: https://git.openjdk.org/jdk/pull/22806#discussion_r1903630765 PR Review Comment: https://git.openjdk.org/jdk/pull/22806#discussion_r1903630936 PR Review Comment: https://git.openjdk.org/jdk/pull/22806#discussion_r1903636877