static void SertafiedBlockHandler(void *data, void *wt) { SertafiedPtr pReq, pNext; unsigned long delay; TimeStamp now; if (!pPending) return; now.milliseconds = GetTimeInMillis(); now.months = currentTime.months; if ((int) (now.milliseconds - currentTime.milliseconds) < 0) now.months++; for (pReq = pPending; pReq; pReq = pNext) { pNext = pReq->next; if (CompareTimeStamps(pReq->revive, now) == LATER) break; FreeResource(pReq->id, RT_NONE); /* AttendClient() may have been called via the resource delete * function so a client may have input to be processed and so * set delay to 0 to prevent blocking in WaitForSomething(). */ AdjustWaitForDelay(wt, 0); } pReq = pPending; if (!pReq) return; delay = pReq->revive.milliseconds - now.milliseconds; AdjustWaitForDelay(wt, delay); }
static void AnimCurScreenBlockHandler (int screenNum, pointer blockData, pointer pTimeout, pointer pReadmask) { ScreenPtr pScreen = screenInfo.screens[screenNum]; AnimCurScreenPtr as = GetAnimCurScreen(pScreen); DeviceIntPtr dev; Bool activeDevice = FALSE; CARD32 now = 0, soonest = ~0; /* earliest time to wakeup again */ for (dev = inputInfo.devices; dev; dev = dev->next) { if (IsPointerDevice(dev) && pScreen == dev->spriteInfo->anim.pScreen) { if (!activeDevice) { now = GetTimeInMillis (); activeDevice = TRUE; } if ((INT32) (now - dev->spriteInfo->anim.time) >= 0) { AnimCurPtr ac = GetAnimCur(dev->spriteInfo->anim.pCursor); int elt = (dev->spriteInfo->anim.elt + 1) % ac->nelt; DisplayCursorProcPtr DisplayCursor; /* * Not a simple Unwrap/Wrap as this * isn't called along the DisplayCursor * wrapper chain. */ DisplayCursor = pScreen->DisplayCursor; pScreen->DisplayCursor = as->DisplayCursor; (void) (*pScreen->DisplayCursor) (dev, pScreen, ac->elts[elt].pCursor); as->DisplayCursor = pScreen->DisplayCursor; pScreen->DisplayCursor = DisplayCursor; dev->spriteInfo->anim.elt = elt; dev->spriteInfo->anim.time = now + ac->elts[elt].delay; } if (soonest > dev->spriteInfo->anim.time) soonest = dev->spriteInfo->anim.time; } } if (activeDevice) AdjustWaitForDelay (pTimeout, soonest - now); Unwrap (as, pScreen, BlockHandler); (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask); if (activeDevice) Wrap (as, pScreen, BlockHandler, AnimCurScreenBlockHandler); else as->BlockHandler = NULL; }
/*ARGSUSED*/ static void XdmcpBlockHandler(void *data, /* unused */ struct timeval **wt, void *pReadmask) { fd_set *last_select_mask = (fd_set *) pReadmask; CARD32 millisToGo; if (state == XDM_OFF) return; FD_SET(xdmcpSocket, last_select_mask); #if defined(IPv6) && defined(AF_INET6) if (xdmcpSocket6 >= 0) FD_SET(xdmcpSocket6, last_select_mask); #endif if (timeOutTime == 0) return; millisToGo = timeOutTime - GetTimeInMillis(); if ((int) millisToGo < 0) millisToGo = 0; AdjustWaitForDelay(wt, millisToGo); }
static void ephyrScreenBlockHandler(ScreenPtr pScreen, void *timeout) { KdScreenPriv(pScreen); KdScreenInfo *screen = pScreenPriv->screen; EphyrScrPriv *scrpriv = screen->driver; pScreen->BlockHandler = scrpriv->BlockHandler; (*pScreen->BlockHandler)(pScreen, timeout); scrpriv->BlockHandler = pScreen->BlockHandler; pScreen->BlockHandler = ephyrScreenBlockHandler; if (scrpriv->pDamage) ephyrInternalDamageRedisplay(pScreen); if (hostx_has_queued_event()) { if (!QueueWorkProc(ephyrEventWorkProc, NULL, NULL)) FatalError("cannot queue event processing in ephyr block handler"); AdjustWaitForDelay(timeout, 0); } }
static void AnimCurScreenBlockHandler (int screenNum, pointer blockData, pointer pTimeout, pointer pReadmask) { ScreenPtr pScreen = screenInfo.screens[screenNum]; AnimCurScreenPtr as = GetAnimCurScreen(pScreen); if (pScreen == animCurState.pScreen) { CARD32 now = GetTimeInMillis (); if ((INT32) (now - animCurState.time) >= 0) { AnimCurPtr ac = GetAnimCur(animCurState.pCursor); int elt = (animCurState.elt + 1) % ac->nelt; DisplayCursorProcPtr DisplayCursor; /* * Not a simple Unwrap/Wrap as this * isn't called along the DisplayCursor * wrapper chain. */ DisplayCursor = pScreen->DisplayCursor; pScreen->DisplayCursor = as->DisplayCursor; (void) (*pScreen->DisplayCursor) (pScreen, ac->elts[elt].pCursor); as->DisplayCursor = pScreen->DisplayCursor; pScreen->DisplayCursor = DisplayCursor; animCurState.elt = elt; animCurState.time = now + ac->elts[elt].delay; } AdjustWaitForDelay (pTimeout, animCurState.time - now); } Unwrap (as, pScreen, BlockHandler); (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask); Wrap (as, pScreen, BlockHandler, AnimCurScreenBlockHandler); }