[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