ChangeLog | 33 +++++++++++++++++++++++++++++++++ debian/changelog | 10 ++++++++++ glx/glxdri.c | 17 +++++++++++++++-- glx/glxdri2.c | 17 +++++++++++++++-- hw/xfree86/common/xf86VGAarbiter.c | 10 +++++++++- hw/xfree86/common/xf86cmap.c | 8 +++++++- hw/xfree86/common/xf86xv.c | 8 ++++++++ hw/xfree86/shadowfb/shadow.c | 11 ++++++++++- hw/xfree86/xaa/xaaInit.c | 12 +++++++++++- 9 files changed, 118 insertions(+), 8 deletions(-)
New commits: commit e0b6d4662e97bd35480325ad7170c41351322c50 Author: Julien Cristau <jcris...@debian.org> Date: Wed Sep 8 19:06:13 2010 +0200 Upload to unstable diff --git a/debian/changelog b/debian/changelog index 1f5254a..0f9f56c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -xorg-server (2:1.7.7-6) UNRELEASED; urgency=low +xorg-server (2:1.7.7-6) unstable; urgency=low * Unwrap/rewrap EnterVT/LeaveVT completely. Because some EnterVT code needs to remove itself from the call chain, we need to fix all of the wrappers @@ -6,7 +6,7 @@ xorg-server (2:1.7.7-6) UNRELEASED; urgency=low the previous upload, pointed out and tested by Sven Joachim, thanks! (closes: #596012, #595973, #595776) - -- Julien Cristau <jcris...@debian.org> Wed, 08 Sep 2010 18:58:18 +0200 + -- Julien Cristau <jcris...@debian.org> Wed, 08 Sep 2010 19:06:02 +0200 xorg-server (2:1.7.7-5) unstable; urgency=low commit f9f196591f63035067cbf62fbe6bb726d7f4c75e Author: Julien Cristau <jcris...@debian.org> Date: Wed Sep 8 19:05:55 2010 +0200 Update changelogs diff --git a/ChangeLog b/ChangeLog index 0d9747d..cb22e2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,36 @@ +commit 3336e1f7f3d7a0e37cc75f7edd96524dd6cf228a +Author: Keith Packard <kei...@keithp.com> +Date: Mon Jul 12 16:01:34 2010 -0700 + + Unwrap/rewrap EnterVT/LeaveVT completely, Fixes 28998 + + Because some EnterVT code needs to remove it self from the + call chain, we need to fix all of the wrappers to correctly + unwrap/rewrap during the call chain. This is a follow-on to the fix + for bug 27114 in commit 68a9ee8370e6f9b38218376ac92d5130a5b0ef1e. + + Signed-off-by: Keith Packard <kei...@keithp.com> + Tested-by: Jesse Barnes <jesse.bar...@intel.com> + Reviewed-by: Daniel Stone <dan...@fooishbar.org> + Reviewed-by: Tiago Vignatti <tiago.vigna...@nokia.com> + (cherry picked from commit d75e8146c414bfd512ba5dbd4a83acb334bbe19b, and + conflict from b618705 fixed up) + Signed-off-by: Julien Cristau <jcris...@debian.org> + +commit 3fabfc198b6f22338f7691907db1b7c849ccac4c +Author: Keith Packard <kei...@keithp.com> +Date: Fri May 7 22:56:04 2010 -0700 + + Clean up RandR12 bits on screen close (bug 27114) + + When resetting the server, pScrn->EnterVT must be unwrapped or the + next server generation will end up wrapping the wrapper and causing an + infinite recursion on EnterVT. + + Signed-off-by: Keith Packard <kei...@keithp.com> + Tested-by: Michael Stapelberg <michael+freedesk...@stapelberg.de> + (cherry picked from commit 68a9ee8370e6f9b38218376ac92d5130a5b0ef1e) + commit 4c313472c45de171efb76231e7c7f323aa4eda3f Author: Alan Coopersmith <alan.coopersm...@oracle.com> Date: Thu May 20 17:56:26 2010 -0700 diff --git a/debian/changelog b/debian/changelog index 36f41bf..1f5254a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +xorg-server (2:1.7.7-6) UNRELEASED; urgency=low + + * Unwrap/rewrap EnterVT/LeaveVT completely. Because some EnterVT code needs + to remove itself from the call chain, we need to fix all of the wrappers + to correctly unwrap/rewrap during the call chain. Followup to the fix in + the previous upload, pointed out and tested by Sven Joachim, thanks! + (closes: #596012, #595973, #595776) + + -- Julien Cristau <jcris...@debian.org> Wed, 08 Sep 2010 18:58:18 +0200 + xorg-server (2:1.7.7-5) unstable; urgency=low [ Julien Cristau ] commit 3336e1f7f3d7a0e37cc75f7edd96524dd6cf228a Author: Keith Packard <kei...@keithp.com> Date: Mon Jul 12 16:01:34 2010 -0700 Unwrap/rewrap EnterVT/LeaveVT completely, Fixes 28998 Because some EnterVT code needs to remove it self from the call chain, we need to fix all of the wrappers to correctly unwrap/rewrap during the call chain. This is a follow-on to the fix for bug 27114 in commit 68a9ee8370e6f9b38218376ac92d5130a5b0ef1e. Signed-off-by: Keith Packard <kei...@keithp.com> Tested-by: Jesse Barnes <jesse.bar...@intel.com> Reviewed-by: Daniel Stone <dan...@fooishbar.org> Reviewed-by: Tiago Vignatti <tiago.vigna...@nokia.com> (cherry picked from commit d75e8146c414bfd512ba5dbd4a83acb334bbe19b, and conflict from b618705 fixed up) Signed-off-by: Julien Cristau <jcris...@debian.org> diff --git a/glx/glxdri.c b/glx/glxdri.c index 6122653..06681fa 100644 --- a/glx/glxdri.c +++ b/glx/glxdri.c @@ -863,12 +863,21 @@ static const char dri_driver_path[] = DRI_DRIVER_PATH; static Bool glxDRIEnterVT (int index, int flags) { + ScrnInfoPtr scrn = xf86Screens[index]; + Bool ret; __GLXDRIscreen *screen = (__GLXDRIscreen *) glxGetScreen(screenInfo.screens[index]); LogMessage(X_INFO, "AIGLX: Resuming AIGLX clients after VT switch\n"); - if (!(*screen->enterVT) (index, flags)) + scrn->EnterVT = screen->enterVT; + + ret = scrn->EnterVT (index, flags); + + screen->enterVT = scrn->EnterVT; + scrn->EnterVT = glxDRIEnterVT; + + if (!ret) return FALSE; glxResumeClients(); @@ -879,6 +888,7 @@ glxDRIEnterVT (int index, int flags) static void glxDRILeaveVT (int index, int flags) { + ScrnInfoPtr scrn = xf86Screens[index]; __GLXDRIscreen *screen = (__GLXDRIscreen *) glxGetScreen(screenInfo.screens[index]); @@ -886,7 +896,10 @@ glxDRILeaveVT (int index, int flags) glxSuspendClients(); - return (*screen->leaveVT) (index, flags); + scrn->LeaveVT = screen->leaveVT; + (*screen->leaveVT) (index, flags); + screen->leaveVT = scrn->LeaveVT; + scrn->LeaveVT = glxDRILeaveVT; } static void diff --git a/glx/glxdri2.c b/glx/glxdri2.c index ed7fb4c..249df79 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -512,12 +512,21 @@ static const char dri_driver_path[] = DRI_DRIVER_PATH; static Bool glxDRIEnterVT (int index, int flags) { + ScrnInfoPtr scrn = xf86Screens[index]; + Bool ret; __GLXDRIscreen *screen = (__GLXDRIscreen *) glxGetScreen(screenInfo.screens[index]); LogMessage(X_INFO, "AIGLX: Resuming AIGLX clients after VT switch\n"); - if (!(*screen->enterVT) (index, flags)) + scrn->EnterVT = screen->enterVT; + + ret = scrn->EnterVT (index, flags); + + screen->enterVT = scrn->EnterVT; + scrn->EnterVT = glxDRIEnterVT; + + if (!ret) return FALSE; glxResumeClients(); @@ -528,6 +537,7 @@ glxDRIEnterVT (int index, int flags) static void glxDRILeaveVT (int index, int flags) { + ScrnInfoPtr scrn = xf86Screens[index]; __GLXDRIscreen *screen = (__GLXDRIscreen *) glxGetScreen(screenInfo.screens[index]); @@ -535,7 +545,10 @@ glxDRILeaveVT (int index, int flags) glxSuspendClients(); - return (*screen->leaveVT) (index, flags); + scrn->LeaveVT = screen->leaveVT; + (*screen->leaveVT) (index, flags); + screen->leaveVT = scrn->LeaveVT; + scrn->LeaveVT = glxDRILeaveVT; } static void diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c index cd45cd1..2696e96 100644 --- a/hw/xfree86/common/xf86VGAarbiter.c +++ b/hw/xfree86/common/xf86VGAarbiter.c @@ -530,12 +530,16 @@ static Bool VGAarbiterEnterVT(int index, int flags) { Bool val; + ScrnInfoPtr pScrn = xf86Screens[index]; ScreenPtr pScreen = screenInfo.screens[index]; VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate( &pScreen->devPrivates, VGAarbiterScreenKey); VGAGet(); - val = (*pScreenPriv->EnterVT)(index, flags); + pScrn->EnterVT = pScreenPriv->EnterVT; + val = (*pScrn->EnterVT)(index, flags); + pScreenPriv->EnterVT = pScrn->EnterVT; + pScrn->EnterVT = VGAarbiterEnterVT; VGAPut(); return val; } @@ -543,12 +547,16 @@ VGAarbiterEnterVT(int index, int flags) static void VGAarbiterLeaveVT(int index, int flags) { + ScrnInfoPtr pScrn = xf86Screens[index]; ScreenPtr pScreen = screenInfo.screens[index]; VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate( &pScreen->devPrivates, VGAarbiterScreenKey); VGAGet(); + pScrn->LeaveVT = pScreenPriv->LeaveVT; (*pScreenPriv->LeaveVT)(index, flags); + pScreenPriv->LeaveVT = pScrn->LeaveVT; + pScrn->LeaveVT = VGAarbiterLeaveVT; VGAPut(); } diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c index f60d96e..b5cff9c 100644 --- a/hw/xfree86/common/xf86cmap.c +++ b/hw/xfree86/common/xf86cmap.c @@ -456,11 +456,17 @@ CMapInstallColormap(ColormapPtr pmap) static Bool CMapEnterVT(int index, int flags) { + ScrnInfoPtr pScrn = xf86Screens[index]; ScreenPtr pScreen = screenInfo.screens[index]; + Bool ret; CMapScreenPtr pScreenPriv = (CMapScreenPtr)dixLookupPrivate( &pScreen->devPrivates, CMapScreenKey); - if((*pScreenPriv->EnterVT)(index, flags)) { + pScrn->EnterVT = pScreenPriv->EnterVT; + ret = (*pScreenPriv->EnterVT)(index, flags); + pScreenPriv->EnterVT = pScrn->EnterVT; + pScrn->EnterVT = CMapEnterVT; + if(ret) { if(miInstalledMaps[index]) CMapReinstallMap(miInstalledMaps[index]); return TRUE; diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c index 8221659..d263b63 100644 --- a/hw/xfree86/common/xf86xv.c +++ b/hw/xfree86/common/xf86xv.c @@ -1225,11 +1225,15 @@ xf86XVQueryAdaptors( static Bool xf86XVEnterVT(int index, int flags) { + ScrnInfoPtr pScrn = xf86Screens[index]; ScreenPtr pScreen = screenInfo.screens[index]; XF86XVScreenPtr ScreenPriv = GET_XF86XV_SCREEN(pScreen); Bool ret; + pScrn->EnterVT = ScreenPriv->EnterVT; ret = (*ScreenPriv->EnterVT)(index, flags); + ScreenPriv->EnterVT = pScrn->EnterVT; + pScrn->EnterVT = xf86XVEnterVT; if(ret) WalkTree(pScreen, xf86XVReputAllVideo, 0); @@ -1239,6 +1243,7 @@ xf86XVEnterVT(int index, int flags) static void xf86XVLeaveVT(int index, int flags) { + ScrnInfoPtr pScrn = xf86Screens[index]; ScreenPtr pScreen = screenInfo.screens[index]; XvScreenPtr pxvs = GET_XV_SCREEN(pScreen); XF86XVScreenPtr ScreenPriv = GET_XF86XV_SCREEN(pScreen); @@ -1270,7 +1275,10 @@ xf86XVLeaveVT(int index, int flags) } } + pScrn->LeaveVT = ScreenPriv->LeaveVT; (*ScreenPriv->LeaveVT)(index, flags); + ScreenPriv->LeaveVT = pScrn->LeaveVT; + pScrn->LeaveVT = xf86XVLeaveVT; } static void diff --git a/hw/xfree86/shadowfb/shadow.c b/hw/xfree86/shadowfb/shadow.c index 9c9aa0d..eb6a8c7 100644 --- a/hw/xfree86/shadowfb/shadow.c +++ b/hw/xfree86/shadowfb/shadow.c @@ -223,9 +223,14 @@ static Bool ShadowEnterVT(int index, int flags) { ScrnInfoPtr pScrn = xf86Screens[index]; + Bool ret; ShadowScreenPtr pPriv = GET_SCREEN_PRIVATE(pScrn->pScreen); - if((*pPriv->EnterVT)(index, flags)) { + pScrn->EnterVT = pPriv->EnterVT; + ret = (*pPriv->EnterVT)(index, flags); + pPriv->EnterVT = pScrn->EnterVT; + pScrn->EnterVT = ShadowEnterVT; + if(ret) { pPriv->vtSema = TRUE; return TRUE; } @@ -236,11 +241,15 @@ ShadowEnterVT(int index, int flags) static void ShadowLeaveVT(int index, int flags) { + ScrnInfoPtr pScrn = xf86Screens[index]; ShadowScreenPtr pPriv = GET_SCREEN_PRIVATE(xf86Screens[index]->pScreen); pPriv->vtSema = FALSE; + pScrn->LeaveVT = pPriv->LeaveVT; (*pPriv->LeaveVT)(index, flags); + pPriv->LeaveVT = pScrn->LeaveVT; + pScrn->LeaveVT = ShadowLeaveVT; } /**********************************************************/ diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c index 2ce2d90..965c8ed 100644 --- a/hw/xfree86/xaa/xaaInit.c +++ b/hw/xfree86/xaa/xaaInit.c @@ -511,16 +511,23 @@ XAAChangeWindowAttributes (WindowPtr pWin, unsigned long mask) static Bool XAAEnterVT(int index, int flags) { + ScrnInfoPtr pScrn = xf86Screens[index]; + Bool ret; ScreenPtr pScreen = screenInfo.screens[index]; XAAScreenPtr pScreenPriv = (XAAScreenPtr)dixLookupPrivate(&pScreen->devPrivates, XAAScreenKey); - return((*pScreenPriv->EnterVT)(index, flags)); + pScrn->EnterVT = pScreenPriv->EnterVT; + ret = ((*pScreenPriv->EnterVT)(index, flags)); + pScreenPriv->EnterVT = pScrn->EnterVT; + pScrn->EnterVT = XAAEnterVT; + return ret; } static void XAALeaveVT(int index, int flags) { + ScrnInfoPtr pScrn = xf86Screens[index]; ScreenPtr pScreen = screenInfo.screens[index]; XAAScreenPtr pScreenPriv = (XAAScreenPtr)dixLookupPrivate(&pScreen->devPrivates, XAAScreenKey); @@ -531,7 +538,10 @@ XAALeaveVT(int index, int flags) infoRec->NeedToSync = FALSE; } + pScrn->LeaveVT = pScreenPriv->LeaveVT; (*pScreenPriv->LeaveVT)(index, flags); + pScreenPriv->LeaveVT = pScrn->LeaveVT; + pScrn->LeaveVT = XAALeaveVT; } typedef struct { -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1otobs-0003yf...@alioth.debian.org