RFR(xxs): 8225178: [Solaris] os::signal() should call sigaction() with SA_SIGINFO
Thomas Stüfe
thomas.stuefe at gmail.com
Tue Jun 4 05:48:01 UTC 2019
Thanks for the quick review and the historical notes!
..Thomas
On Mon, Jun 3, 2019 at 10:05 PM Daniel D. Daugherty <
daniel.daugherty at oracle.com> wrote:
> On 6/3/19 9:56 AM, Thomas Stüfe wrote:
> > Hi all,
> >
> > may I have reviews please for this small patch:
> >
> > Bug: https://bugs.openjdk.java.net/browse/JDK-8225178
> > webrev:
> >
> http://cr.openjdk.java.net/~stuefe/webrevs/8225178-solaris-sa_siginfo-missing/webrev.00/webrev/
>
> src/hotspot/os/solaris/os_solaris.cpp
> No comments.
>
> Thumbs up!
>
> Dan
>
> P.S.
> Just for historical note, I tracked the os::signal() code back into the
> TeamWare history and found that the missing SA_SIGINFO has been that way
> since that piece of code was introduced in 1998:
>
> $ sp -r1.82.1.3 src/os/solaris/vm/os_solaris.cpp
> src/os/solaris/vm/SCCS/s.os_solaris.cpp:
>
> D 1.82.1.3 98/10/20 16:47:14 jrose 277 276 00012/00003/02137
> MRs:
> COMMENTS:
> reconcile (and use sigaction instead of signal, to avoid SA_RESETHAND
> behavior)
>
> $ sccs sccsdiff -r1.82.1.{2,3} src/os/solaris/vm/os_solaris.cpp
>
> ------- os_solaris.cpp -------
> 1045,1046c1045
> < /* We need to reinstate the signal handler each time... */
> < os::signal(sig, UserHandler);
> ---
> > // We do not need to reinstate the signal handler each time...
> 1054c1053,1062
> < return (void*)::signal(signal_number, (void (*)(int))handler);
> ---
> > struct sigaction sigAct, oldSigAct;
> > sigfillset(&(sigAct.sa_mask));
> > sigAct.sa_flags = SA_RESTART & ~SA_RESETHAND;
> > sigAct.sa_handler = (void (*)(int))handler;
> >
> > if (sigaction(signal_number, &sigAct, &oldSigAct)) {
> > fatal("sigaction: cannot set signal %d (errno=%d)",
> signal_number, errno);
> > }
> >
> > return (void*)oldSigAct.sa_handler;
> 2139a2148
> > // 1.242 98/10/16 16:41:24 os_win32.cpp
>
>
>
> >
> > os::signal(), on Solaris, does not specify SA_SIGINFO. This leads to
> > signal handlers installed with this function - among others, the
> > secondary signal handler installed during error reporting - to be
> > called without siginfo_t pointer.
> >
> > All other platforms specify SA_SIGINFO in os::signal(), and so does
> > the Solaris-specific code which installs the "big" primary signal
> > handler. At SAP we run with this fix (specifying SA_SIGINFO) since years.
> >
> > Thanks, Thomas
>
>
More information about the hotspot-runtime-dev
mailing list