[PATCH:xserver] OsSigHandler should not show rtld errors for unrelated signals
Aaron Plattner
aplattner at nvidia.com
Mon Sep 12 16:34:10 UTC 2016
On 09/10/2016 09:08 PM, Alan Coopersmith wrote:
> If RTLD_DI_SETSIGNAL is set to let us turn runtime linker/loader errors
> into catchable signals, then we should only show the errors when catching
> that signal, instead of tossing out red herrings to distract people with
> unrelated crashes long after their last failed symbol lookup (especially
> when using drivers built to support multiple API's by checking which
> symbols are available before calling them).
Nice.
Presumably you can also SIGQUIT the server with Ctrl-\ in the terminal
it was run on, but it doesn't seem worth trying to suppress the dlsym
error in that case too.
Reviewed-by: Aaron Plattner <aplattner at nvidia.com>
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
> ---
> os/osinit.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/os/osinit.c b/os/osinit.c
> index 47061bb..5b2f6b5 100644
> --- a/os/osinit.c
> +++ b/os/osinit.c
> @@ -114,10 +114,14 @@ OsSigHandler(int signo)
> #endif
> {
> #ifdef RTLD_DI_SETSIGNAL
> - const char *dlerr = dlerror();
> +# define SIGNAL_FOR_RTLD_ERROR SIGQUIT
> + if (signo == SIGNAL_FOR_RTLD_ERROR) {
> + const char *dlerr = dlerror();
>
> - if (dlerr) {
> - LogMessageVerbSigSafe(X_ERROR, 1, "Dynamic loader error: %s\n", dlerr);
> + if (dlerr) {
> + LogMessageVerbSigSafe(X_ERROR, 1,
> + "Dynamic loader error: %s\n", dlerr);
> + }
> }
> #endif /* RTLD_DI_SETSIGNAL */
>
> @@ -217,7 +221,7 @@ OsInit(void)
> * after ourselves.
> */
> {
> - int failure_signal = SIGQUIT;
> + int failure_signal = SIGNAL_FOR_RTLD_ERROR;
>
> dlinfo(RTLD_SELF, RTLD_DI_SETSIGNAL, &failure_signal);
> }
>
More information about the xorg-devel
mailing list