Hello community, here is the log from the commit of package xorg-x11-server checked in at Mon Aug 7 18:14:46 CEST 2006. -------- --- xorg-x11-server/xorg-x11-server.changes 2006-08-06 17:55:28.000000000 +0200 +++ xorg-x11-server/xorg-x11-server.changes 2006-08-07 16:43:00.000000000 +0200 @@ -1,0 +2,29 @@ +Mon Aug 7 11:02:11 CEST 2006 - sndirsch@suse.de + +- p_xf86Mode.diff: + * removes wrong warning (Bug #139510) +- p_xorg_acpi.diff: + * reconnect to acpid when acpid has been killed (Bug #148384) +- p_xkills_wrong_client.diff: + * This patch has unveiled two other problems. One is rather + serious as there seems to be a non-zero possibility that the + Xserver closes the wrong connection and this closes the wrong + client when it looks for stale sockets of clients that have + disappeared (eich, Bug #150869) +- p_bug159532.diff: + * X Clients can intentionally or unintenionally crash X11 by + using composite on depth 4 pixmaps. This patch fixes this. + (Bug #159532) +- p_xnest-ignore-getimage-errors.diff: + * ignores the X error on GetImage in Xnest (Bug #174228, + X.Org Bug #4411) +- p_initialize-pci-tag.diff: + * initialize PCI tag correctly, which is used by an IA64 specific + patch (see Bug #147261 for details); fixes Xserver crashes with + fglrx driver - and possibly other drivers like vesa - during + initial startup (!), VT switch and startup of second Xserver + (SLED10 Blocker Bugs #180535, #170991, #158806) +- p_ia64-console.diff: + * fixes MCA after start of second Xserver (Bug #177011) + +------------------------------------------------------------------- New: ---- p_bug159532.diff p_ia64-console.diff p_initialize-pci-tag.diff p_xf86Mode.diff p_xkills_wrong_client.diff p_xnest-ignore-getimage-errors.diff p_xorg_acpi.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xorg-x11-server.spec ++++++ --- /var/tmp/diff_new_pack.BE76fe/_old 2006-08-07 18:14:35.000000000 +0200 +++ /var/tmp/diff_new_pack.BE76fe/_new 2006-08-07 18:14:35.000000000 +0200 @@ -17,7 +17,7 @@ URL: http://xorg.freedesktop.org/ %define EXPERIMENTAL 0 Version: 7.1 -Release: 13 +Release: 14 License: X11/MIT BuildRoot: %{_tmppath}/%{name}-%{version}-build Group: System/X11/Servers/XF86_4 @@ -40,6 +40,13 @@ Patch9: p_vga-crashfix.diff Patch10: p_xorg_rom_read.diff Patch11: ps_showopts.diff +Patch12: p_xf86Mode.diff +Patch13: p_xorg_acpi.diff +Patch14: p_xkills_wrong_client.diff +Patch15: p_bug159532.diff +Patch16: p_xnest-ignore-getimage-errors.diff +Patch17: p_initialize-pci-tag.diff +Patch18: p_ia64-console.diff %description @@ -172,6 +179,17 @@ %patch9 -p2 %patch10 -p3 %patch11 +%patch12 -p2 +%patch13 +%patch14 -p2 +%patch15 -p2 +%patch16 -p2 +pushd hw/xfree86/os-support/linux/int10 +%patch17 +popd +pushd hw/xfree86/os-support +%patch18 +popd %build autoreconf -fi @@ -391,6 +409,32 @@ /usr/share/aclocal/*.m4 %changelog -n xorg-x11-server +* Mon Aug 07 2006 - sndirsch@suse.de +- p_xf86Mode.diff: + * removes wrong warning (Bug #139510) +- p_xorg_acpi.diff: + * reconnect to acpid when acpid has been killed (Bug #148384) +- p_xkills_wrong_client.diff: + * This patch has unveiled two other problems. One is rather + serious as there seems to be a non-zero possibility that the + Xserver closes the wrong connection and this closes the wrong + client when it looks for stale sockets of clients that have + disappeared (eich, Bug #150869) +- p_bug159532.diff: + * X Clients can intentionally or unintenionally crash X11 by + using composite on depth 4 pixmaps. This patch fixes this. + (Bug #159532) +- p_xnest-ignore-getimage-errors.diff: + * ignores the X error on GetImage in Xnest (Bug #174228, + X.Org Bug #4411) +- p_initialize-pci-tag.diff: + * initialize PCI tag correctly, which is used by an IA64 specific + patch (see Bug #147261 for details); fixes Xserver crashes with + fglrx driver - and possibly other drivers like vesa - during + initial startup (!), VT switch and startup of second Xserver + (SLED10 Blocker Bugs #180535, #170991, #158806) +- p_ia64-console.diff: + * fixes MCA after start of second Xserver (Bug #177011) * Sat Aug 05 2006 - sndirsch@suse.de - p_mouse_misc.diff: * fix X server crashes with synaptics driver (Bug #61702) ++++++ p_bug159532.diff ++++++ Index: programs/Xserver/fb/fbcompose.c =================================================================== RCS file: /work/cvsdir/cvs/xc/programs/Xserver/fb/fbcompose.c,v retrieving revision 1.1.1.16 diff -u -r1.1.1.16 programs/Xserver/fb/fbcompose.c --- programs/Xserver/fb/fbcompose.c 23 Jan 2006 11:13:59 -0000 1.1.1.16 +++ programs/Xserver/fb/fbcompose.c 20 Mar 2006 16:56:50 -0000 @@ -2610,6 +2610,7 @@ fetchPixelProc fetch = fetchPixelProcForPicture(pict); miIndexedPtr indexed = (miIndexedPtr) pict->pFormat->index.devPrivate; + if (!fetch) return; fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); bits += yoff*stride + (xoff*bpp >> FB_SHIFT); @@ -2627,6 +2628,8 @@ int bpp; int xoff, yoff; fetchProc fetch = fetchProcForPicture(pict); + if (!fetch) + return; miIndexedPtr indexed = (miIndexedPtr) pict->pFormat->index.devPrivate; fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); @@ -2871,6 +2874,7 @@ fetch = fetchPixelProcForPicture(pict); + if (!fetch) return; fbGetDrawable(pict->pDrawable, bits, stride, bpp, xoff, yoff); x += xoff; y += yoff; @@ -3340,6 +3344,7 @@ int bpp; int xoff, yoff; storeProc store = storeProcForPicture(pict); + if (!store) return; miIndexedPtr indexed = (miIndexedPtr) pict->pFormat->index.devPrivate; fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); @@ -3369,6 +3374,7 @@ store = storeProcForPicture(pict); astore = storeProcForPicture(pict->alphaMap); + if (!store || !astore) return; aindexed = (miIndexedPtr) pict->alphaMap->pFormat->index.devPrivate; ax = x; ++++++ p_ia64-console.diff ++++++ Index: linux/lnx_init.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_init.c,v retrieving revision 1.9 diff -u -r1.9 lnx_init.c --- linux/lnx_init.c 26 Aug 2005 07:35:55 -0000 1.9 +++ linux/lnx_init.c 29 Jun 2006 09:33:05 -0000 @@ -243,9 +243,6 @@ if (!ShareVTs) { -#if defined(DO_OS_FONTRESTORE) - lnx_savefont(); -#endif /* * now get the VT */ @@ -256,7 +253,9 @@ if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) < 0) xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed: %s\n", strerror(errno)); - +#if defined(DO_OS_FONTRESTORE) + lnx_savefont(); +#endif if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0) FatalError("xf86OpenConsole: VT_GETMODE failed %s\n", strerror(errno)); @@ -345,6 +344,11 @@ if (VTSwitch) { +#if defined(DO_OS_FONTRESTORE) + if (xf86Info.vtno == vtno) /* check if we are active */ + lnx_restorefont(); + lnx_freefontdata(); +#endif /* * Perform a switch back to the active VT when we were started */ @@ -355,11 +359,6 @@ activeVT = -1; } -#if defined(DO_OS_FONTRESTORE) - if (xf86Info.vtno == vtno) /* check if we are active */ - lnx_restorefont(); - lnx_freefontdata(); -#endif } close(xf86Info.consoleFd); /* make the vt-manager happy */ Index: shared/VTsw_usl.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xfree86/os-support/shared/VTsw_usl.c,v retrieving revision 1.5 diff -u -r1.5 VTsw_usl.c --- shared/VTsw_usl.c 3 Jul 2005 07:01:35 -0000 1.5 +++ shared/VTsw_usl.c 29 Jun 2006 09:33:05 -0000 @@ -64,15 +64,15 @@ xf86VTSwitchAway() { xf86Info.vtRequestsPending = FALSE; +#ifdef OSSWITCHAWAY + OSSWITCHAWAY; +#endif if (ioctl(xf86Info.consoleFd, VT_RELDISP, 1) < 0) { return(FALSE); } else { -#ifdef OSSWITCHAWAY - OSSWITCHAWAY; -#endif return(TRUE); } } ++++++ p_initialize-pci-tag.diff ++++++ Index: linux.c =================================================================== RCS file: /work/cvsdir/cvs/xc/programs/Xserver/hw/xfree86/os-support/linux/int10/linux.c,v retrieving revision 1.1.1.30 diff -u -r1.1.1.30 linux.c --- linux.c 13 Sep 2005 10:31:31 -0000 1.1.1.30 +++ linux.c 27 Jun 2006 14:25:58 -0000 @@ -158,6 +158,11 @@ pInt = (xf86Int10InfoPtr)xnfcalloc(1, sizeof(xf86Int10InfoRec)); pInt->scrnIndex = screen; pInt->entityIndex = entityIndex; + { + pciVideoPtr pvp = xf86GetPciInfoForEntity(entityIndex); + if (pvp) pInt->Tag = ((pciConfigPtr)(pvp->thisCard))->tag; + } + if (!xf86Int10ExecSetup(pInt)) goto error0; pInt->mem = &linuxMem; ++++++ p_xf86Mode.diff ++++++ --- programs/Xserver/hw/xfree86/common/xf86Mode.c.orig 2005-11-30 11:35:17.000000000 +0100 +++ programs/Xserver/hw/xfree86/common/xf86Mode.c 2006-01-30 15:25:48.000000000 +0100 @@ -765,7 +765,7 @@ } if (mon_range) { /* mode->Clock in kHz, DDC in MHz */ - if (mon_range->max_clock < 2550 && + if (mon_range->max_clock != 0 && mon_range->max_clock < 2550 && mode->Clock / 1000.0 > mon_range->max_clock) { xf86Msg(X_WARNING, "(%s,%s) mode clock %gMHz exceeds DDC maximum %dMHz\n", ++++++ p_xkills_wrong_client.diff ++++++ Index: programs/Xserver/os/connection.c =================================================================== RCS file: /work/cvsdir/cvs/xc/programs/Xserver/os/connection.c,v retrieving revision 1.1.1.35 diff -u -r1.1.1.35 connection.c --- programs/Xserver/os/connection.c 13 Sep 2005 10:31:37 -0000 1.1.1.35 +++ programs/Xserver/os/connection.c 1 Mar 2006 11:00:20 -0000 @@ -1134,7 +1134,7 @@ FD_ZERO(&tmask); FD_SET(curclient, &tmask); r = Select (curclient + 1, &tmask, NULL, NULL, ¬ime); - if (r < 0) + if (r < 0 && (errno == EBADF)) CloseDownClient(clients[ConnectionTranslation[curclient]]); mask &= ~((fd_mask)1 << curoff); } ++++++ p_xnest-ignore-getimage-errors.diff ++++++ Index: programs/Xserver/hw/xnest/GCOps.c =================================================================== RCS file: /cvs/xorg/xc/programs/Xserver/hw/xnest/GCOps.c,v retrieving revision 1.6 diff -u -p -r1.6 GCOps.c --- programs/Xserver/hw/xnest/GCOps.c 14 Jul 2005 03:36:43 -0000 1.6 +++ programs/Xserver/hw/xnest/GCOps.c 7 Jun 2006 13:40:01 -0000 @@ -96,6 +96,13 @@ xnestPutImage(DrawablePtr pDrawable, GCP } } +static int +xnestIgnoreErrorHandler (Display *display, + XErrorEvent *event) +{ + return False; /* return value is ignored */ +} + void xnestGetImage(DrawablePtr pDrawable, int x, int y, int w, int h, unsigned int format, unsigned long planeMask, @@ -103,9 +110,13 @@ xnestGetImage(DrawablePtr pDrawable, int { XImage *ximage; int length; + int (*old_handler)(Display*, XErrorEvent*); + /* we may get BadMatch error when xnest window is minimized */ + old_handler = XSetErrorHandler (xnestIgnoreErrorHandler); ximage = XGetImage(xnestDisplay, xnestDrawable(pDrawable), x, y, w, h, planeMask, format); + XSetErrorHandler (old_handler); if (ximage) { length = ximage->bytes_per_line * ximage->height; ++++++ p_xorg_acpi.diff ++++++ diff -p -u -r hw/xfree86/os-support/linux.orig/lnx_acpi.c hw/xfree86/os-support/linux/lnx_acpi.c --- hw/xfree86/os-support/linux.orig/lnx_acpi.c 2006-08-07 11:42:39.000000000 +0200 +++ hw/xfree86/os-support/linux/lnx_acpi.c 2006-08-07 12:11:48.000000000 +0200 @@ -32,8 +32,10 @@ #define ACPI_VIDEO_HEAD_INVALID (~0u - 1) #define ACPI_VIDEO_HEAD_END (~0u) +static PMClose doLnxACPIOpen(void); static void lnxCloseACPI(void); static pointer ACPIihPtr = NULL; +static OsTimerPtr acpiTimer = NULL; PMClose lnxACPIOpen(void); /* in milliseconds */ @@ -52,6 +54,22 @@ lnxACPIReopen(OsTimerPtr timer, CARD32 t #define LINE_LENGTH 80 +static CARD32 +lnxACPICheckTimer(OsTimerPtr timer, CARD32 now, pointer arg) +{ +#if DEBUG + ErrorF("ACPI: trying to reopen\n"); +#endif + if (doLnxACPIOpen()) { +#if DEBUG + ErrorF("ACPI: successfully reopened\n"); +#endif + acpiTimer = NULL; + return 0; + } + return 5000; +} + static int lnxACPIGetEventFromOs(int fd, pmEvent *events, int num) { @@ -132,16 +150,13 @@ lnxACPIConfirmEventToOs(int fd, pmEvent } } -PMClose -lnxACPIOpen(void) +static PMClose +doLnxACPIOpen(void) { int fd; struct sockaddr_un addr; int r = -1; -#ifdef DEBUG - ErrorF("ACPI: OSPMOpen called\n"); -#endif if (ACPIihPtr || !xf86Info.pmFlag) return NULL; @@ -169,6 +184,27 @@ lnxACPIOpen(void) return lnxCloseACPI; } +PMClose +lnxACPIPoll(void) +{ + TimerSet(NULL, 0, 5000, lnxACPICheckTimer, NULL); + return lnxCloseACPI; +} + +PMClose +lnxACPIOpen(void) +{ + PMClose ret; +#ifdef DEBUG + ErrorF("ACPI: OSPMOpen called\n"); +#endif + if (!(ret = doLnxACPIOpen())) + xf86MsgVerb(X_WARNING,3,"Open ACPI failed (%s) (%s)\n", ACPI_SOCKET, + strerror(errno)); + + return ret; +} + static void lnxCloseACPI(void) { @@ -182,5 +218,11 @@ lnxCloseACPI(void) shutdown(fd, 2); close(fd); ACPIihPtr = NULL; + xf86PMGetEventFromOs = NULL; + xf86PMConfirmEventToOs = NULL; + if (acpiTimer) { + TimerCancel(acpiTimer); + acpiTimer = NULL; + } } } diff -p -u -r hw/xfree86/os-support/linux.orig/lnx_apm.c hw/xfree86/os-support/linux/lnx_apm.c --- hw/xfree86/os-support/linux.orig/lnx_apm.c 2006-08-07 11:42:39.000000000 +0200 +++ hw/xfree86/os-support/linux/lnx_apm.c 2006-08-07 12:05:05.000000000 +0200 @@ -12,6 +12,7 @@ #ifdef HAVE_ACPI extern PMClose lnxACPIOpen(void); +extern PMClose lnxACPIPoll(void); #endif #ifdef HAVE_APM @@ -150,6 +151,12 @@ xf86OSPMOpen(void) ret = lnxAPMOpen(); #endif + /* if we can neither open ACPI nor APM poll for an ACPI service to + become available */ + + if (!ret && !xf86acpiDisableFlag) + ret = lnxACPIPoll(); + return ret; } ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun...