xf86-video-intel: Branch 'dri2-swapbuffers' - src/drmmode_display.c

Kristian Høgsberg krh at kemper.freedesktop.org
Wed Jul 22 17:58:14 PDT 2009


 src/drmmode_display.c |   18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

New commits:
commit b20acfaf265eec27f96be8940fd339d7c2ec8ec8
Author: Kristian Høgsberg <krh at redhat.com>
Date:   Wed Jul 22 12:57:25 2009 -0400

    The select readmask passed in the wakeup handler lies...

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 6fd5836..1e5eb08 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1183,17 +1183,19 @@ drmmode_page_flip_handler(int fd,
 }
 
 static void
-drm_wakeup_handler(pointer data, int err, pointer read_mask)
+drm_wakeup_handler(pointer data, int err, pointer p)
 {
     drmmode_ptr drmmode = data;
+    fd_set *read_mask = p;
+    struct pollfd pf[1];
 
-    if (FD_ISSET(drmmode->fd, (fd_set *) read_mask))
-	drmHandleEvent(drmmode->fd, &drmmode->event_context);
-}
+    /* FIXME: Why does the select read mask lie? */
+    pf[0].fd = drmmode->fd;
+    pf[0].events = POLLIN;
+    poll(pf, 1, 0);
 
-static void
-drm_block_handler(pointer data, struct timeval **tv, pointer read_mask)
-{
+    if (pf[0].revents & POLLIN)
+	drmHandleEvent(drmmode->fd, &drmmode->event_context);
 }
 
 Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp)
@@ -1240,7 +1242,7 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp)
 		drmmode->event_context.page_flip_handler =
 		    drmmode_page_flip_handler;
 		AddGeneralSocket(fd);
-		RegisterBlockAndWakeupHandlers(drm_block_handler,
+		RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
 					       drm_wakeup_handler,
 					       drmmode);
 	}


More information about the xorg-commit mailing list