diff --git a/src/savage_dri.c b/src/savage_dri.c index b55573e..9700ac1 100644 --- a/src/savage_dri.c +++ b/src/savage_dri.c @@ -338,7 +338,10 @@ static void SAVAGEWakeupHandler( int scr ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; SavagePtr psav = SAVPTR(pScrn); - DRILock(pScreen, 0); + /*DRILock(pScreen, 0);*/ + psav->pDRIInfo->wrap.WakeupHandler = psav->coreWakeupHandler; + (*psav->pDRIInfo->wrap.WakeupHandler) (screenNum, wakeupData, result, pReadmask); + psav->pDRIInfo->wrap.WakeupHandler = SAVAGEWakeupHandler; psav->LockHeld = 1; if (psav->ShadowStatus) { /* fetch the global shadow counter */ @@ -376,7 +379,10 @@ #endif psav->ShadowVirtual[1023] = globalShadowCounter; } psav->LockHeld = 0; - DRIUnlock(pScreen); + psav->pDRIInfo->wrap.BlockHandler = psav->coreBlockHandler; + (*psav->pDRIInfo->wrap.BlockHandler) (screenNum, blockData, pTimeout, pReadmask); + psav->pDRIInfo->wrap.BlockHandler = SAVAGEBlockHandler; + /*DRIUnlock(pScreen);*/ } void SAVAGESelectBuffer( ScrnInfoPtr pScrn, int which ) @@ -888,7 +894,9 @@ Bool SAVAGEDRIScreenInit( ScreenPtr pScr pDRIInfo->ddxDrawableTableEntry = SAVAGE_MAX_DRAWABLES; /* override default DRI block and wakeup handler */ + psav->coreBlockHandler = pDRIInfo->wrap.BlockHandler; pDRIInfo->wrap.BlockHandler = SAVAGEBlockHandler; + psav->coreWakeupHandler = pDRIInfo->wrap.WakeupHandler; pDRIInfo->wrap.WakeupHandler = SAVAGEWakeupHandler; pDRIInfo->wrap.ValidateTree = NULL; diff --git a/src/savage_driver.h b/src/savage_driver.h index f2193c3..f963fd7 100644 --- a/src/savage_driver.h +++ b/src/savage_driver.h @@ -444,7 +444,8 @@ #ifdef XF86DRI __GLXvisualConfig* pVisualConfigs; SAVAGEConfigPrivPtr pVisualConfigsPriv; SAVAGEDRIServerPrivatePtr DRIServerInfo; - + ScreenWakeupHandlerProcPtr coreWakeupHandler; + ScreenBlockHandlerProcPtr coreBlockHandler; #if 0 Bool haveQuiescense;