[PATCH 2/2] xfree86: handle xorg.conf devices with logind

Peter Hutterer peter.hutterer at who-t.net
Tue Mar 11 18:20:23 PDT 2014


On Tue, Mar 11, 2014 at 07:37:24AM -0300, Laércio de Sousa wrote:
> Hi there!
> 
> Could this other one by Oleg Samarin be related (except for the xf86Bus.c
> patch, which I've sent previously and is already under review)?
> 
> http://thread.gmane.org/gmane.comp.freedesktop.xorg.devel/37377

not related. this one fixes a crasher in the new systemd-logind code that is
triggered if devices are statically set in the xorg.conf, not through the
udev/hal backend. you'd see it with our without multiseat config :)

Cheers,
   Peter

> 
> 2014-03-11 4:09 GMT-03:00 Hans de Goede <hdegoede at redhat.com>:
> 
> > Hi,
> >
> > On 03/11/2014 05:32 AM, Peter Hutterer wrote:
> > > Only devices from the config backend have their attributes set, devices
> > from
> > > the xorg.conf only have Option "Device". That option is also set by the
> > > config backend, so use it.
> > >
> > > And since the config backend sets our major/minor but xorg.conf devices
> > don't
> > > have that set, make sure we try to stat it first where needed.
> > >
> > > Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> >
> > Looks good:
> >
> > Reviewed-by: Hans de Goede <hdegoede at redhat.com>
> >
> > Regards,
> >
> > Hans
> >
> >
> > > ---
> > > Fixes a crash when running with hotplug disabled and fixed devices in the
> > > xorg.conf
> > >
> > >  hw/xfree86/common/xf86Xinput.c | 22 ++++++++++++++++++++--
> > >  1 file changed, 20 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/hw/xfree86/common/xf86Xinput.c
> > b/hw/xfree86/common/xf86Xinput.c
> > > index 7c3e479..36b92a9 100644
> > > --- a/hw/xfree86/common/xf86Xinput.c
> > > +++ b/hw/xfree86/common/xf86Xinput.c
> > > @@ -81,6 +81,7 @@
> > >
> > >  #include <stdarg.h>
> > >  #include <stdint.h>             /* for int64_t */
> > > +#include <sys/stat.h>
> > >  #include <unistd.h>
> > >
> > >  #include "mi.h"
> > > @@ -804,6 +805,18 @@ xf86InputDevicePostInit(DeviceIntPtr dev)
> > >      return Success;
> > >  }
> > >
> > > +static void
> > > +xf86stat(const char *path, int *maj, int *min)
> > > +{
> > > +    struct stat st;
> > > +
> > > +    if (stat(path, &st) == -1)
> > > +        return;
> > > +
> > > +    *maj = major(st.st_rdev);
> > > +    *min = minor(st.st_rdev);
> > > +}
> > > +
> > >  /**
> > >   * Create a new input device, activate and enable it.
> > >   *
> > > @@ -828,6 +841,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr
> > *pdev, BOOL enable)
> > >      DeviceIntPtr dev = NULL;
> > >      Bool paused;
> > >      int rval;
> > > +    const char *path;
> > >
> > >      /* Memory leak for every attached device if we don't
> > >       * test if the module is already loaded first */
> > > @@ -841,9 +855,13 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr
> > *pdev, BOOL enable)
> > >          goto unwind;
> > >      }
> > >
> > > -    if (drv->capabilities & XI86_DRV_CAP_SERVER_FD) {
> > > +    path = xf86CheckStrOption(pInfo->options, "Device", NULL);
> > > +    if (path && pInfo->major == 0 && pInfo->minor == 0)
> > > +        xf86stat(path, &pInfo->major, &pInfo->minor);
> > > +
> > > +    if (path && (drv->capabilities & XI86_DRV_CAP_SERVER_FD)){
> > >          int fd = systemd_logind_take_fd(pInfo->major, pInfo->minor,
> > > -                                        pInfo->attrs->device, &paused);
> > > +                                        path, &paused);
> > >          if (fd != -1) {
> > >              if (paused) {
> > >                  /* Put on new_input_devices list for delayed probe */
> > >
> > _______________________________________________
> > xorg-devel at lists.x.org: X.Org development
> > Archives: http://lists.x.org/archives/xorg-devel
> > Info: http://lists.x.org/mailman/listinfo/xorg-devel
> >

> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel



More information about the xorg-devel mailing list