On Aug 29 2022, Matthieu Herrb wrote:
> On Sat, Aug 27, 2022 at 01:07:30PM +0200, Walter Alejandro Iglesias wrote:
> > X crashes when moving cursor from keyboard bindings.  I can reproduce
> > the bug with cwm, fvwm or fvwm2 (because this window managers have that
> > option).  According to the logs the cause could be in wsmouse.
> > 
> > **IT'S NOT EASY TO REPRODUCE IT**.  Generally, but not necessarily is
> > easier right after X started (when wsmouse is still being loaded), and
> > stressing it, changing fast the direction.
> >
> 
> Hi,
> 
> I also cannot reproduce it, however, I've some idea on what could be
> happening.
> 
> Can you try the patch below ? It adds locking with the input thread of
> the X server while adding new devices.

Matthieu, I'm very very sorry to say that I'm still able to reproduce
it.  Again, it doesn't happen every time, I have to insist.

If you can think of anything else I can try let me know.


I didn't mention the following warning that shows up every time I run
startx, I ignore if it's related or even relevant:

  WARNING: Kernel has no file descriptor comparison support: No such a file or 
directory



> 
> Index: config/wscons.c
> ===================================================================
> RCS file: /cvs/OpenBSD/xenocara/xserver/config/wscons.c,v
> retrieving revision 1.25
> diff -u -r1.25 wscons.c
> --- config/wscons.c   11 Jun 2019 14:51:34 -0000      1.25
> +++ config/wscons.c   29 Aug 2022 18:53:31 -0000
> @@ -113,9 +113,12 @@
>      }
>      close(fd);
>  
> +    input_lock();
>      input_options = input_option_new(input_options, "_source", 
> "server/wscons");
> -    if (input_options == NULL)
> +    if (input_options == NULL) {
> +        input_unlock();
>          return;
> +    }
>  
>      LogMessage(X_INFO, "config/wscons: checking input device %s\n",
>                 WSCONS_KBD_DEVICE);
> @@ -178,6 +181,7 @@
>      }
>   unwind:
>      input_option_free_list(&input_options);
> +    input_unlock();
>  }
>  
>  static void
> @@ -194,9 +198,12 @@
>      if (!config_info)
>          return;
>  
> +    input_lock();
>      input_options = input_option_new(input_options, "_source", 
> "server/wscons");
> -    if (input_options == NULL)
> +    if (input_options == NULL) {
> +        input_unlock();
>          return;
> +    }
>  
>      input_options = input_option_new(input_options, "name", strdup(path));
>      input_options = input_option_new(input_options, "driver", 
> strdup(driver));
> @@ -213,6 +220,7 @@
>      }
>   unwind:
>      input_option_free_list(&input_options);
> +    input_unlock();
>  }
>  
>  static void
> 
> -- 
> Matthieu Herrb

Reply via email to