tags 345537 + patch stop On Sun, Jan 01, 2006 at 05:07:26PM +0100, Mattia Dongili wrote: > Package: xserver-xorg > Version: 6.9.0.dfsg.1-1 > Severity: normal > > Hello, > > I just noticed that Xorg uses ACPI's /proc/acpi/event. Now, when acpid > is running Xorg is smart enough to read from its socket instead, and > when you, brave user, stop acpid: kaboom! > Xorg uses all my CPU leaving no option than restarting it. > > Disabling PM management (Option "NoPM") obviously helps and also fixes > xorg stealing /proc/acpi/event.
bug also found in xorg's bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=5140 I've rolled a patch that works here (also submitted in the bugreport above), it disables reading from acpid socket on any error (tested, works). A different approach could implement (re)opening /proc/acpi/event on EOF as that can only happen when using acpid socket because if ACPI is enabled the /proc/acpi/event is always compiled in. I'm also going to try this one. -- mattia :wq!
Index: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_acpi.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_acpi.c,v retrieving revision 1.2 diff -u -r1.2 lnx_acpi.c --- xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_acpi.c 31 Oct 2005 05:45:40 -0000 1.2 +++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_acpi.c 2 Jan 2006 11:57:36 -0000 @@ -45,6 +45,13 @@ memset(ev, 0, LINE_LENGTH); n = read( fd, ev, LINE_LENGTH ); + if (n <= 0) { + xf86MsgVerb(X_WARNING,3,"Error reading the ACPI Event handler, disabling.\n"); + if (n < 0) + xf86MsgVerb(X_WARNING,3,"%s\n", strerror(errno)); + lnxCloseACPI(); + return 0; + } /* Check that we have a video event */ if (strstr(ev, "video") == ev) { @@ -160,6 +167,9 @@ #ifdef DEBUG ErrorF("ACPI: Closing device\n"); #endif + xf86PMGetEventFromOs = NULL; + xf86PMConfirmEventToOs = NULL; + if (ACPIihPtr) { fd = xf86RemoveInputHandler(ACPIihPtr); shutdown(fd, 2);