diff options
author | Dodji Seketeli <dodji@openedhand.com> | 2007-09-04 18:28:16 +0200 |
---|---|---|
committer | Dodji Seketeli <dodji@openedhand.com> | 2007-10-02 16:55:16 +0200 |
commit | 6d1e44d3d53b451d466d43197be589d0ecc4b9f6 (patch) | |
tree | 66c2f565272bdcea3c9be4b987bedc3b6e0d411b /hw/kdrive/ephyr/ephyrdriext.c | |
parent | a39b57d2f784f14e3198c8506f5eb865bacc2440 (diff) |
Xephyr: fix a host X hang.
* hw/kdrive/ephyr/ephyrdri.c:
(ephyrDRIGetDrawableInfo): quickly hook
this into getting the drawable info from the host
X server. For the time being, this only gets the drawable info
of the Xephyr main window in the host. It should really get
the info of a the peer drawable in the host X. So there should be a
peer drawable to begin with.
* hw/kdrive/ephyr/ephyrdriext.c:
(ProcXF86DRIGetDrawableInfo): some cleanups. Properly get the
the drawable info otherwise there is a host X hang.
* hw/kdrive/ephyr/ephyrhostglx.c: do not
(ephyrHostGLXQueryVersion): do not use C bindings of the glx protocol
calls. Some of those actually access DRI context directly, resulting
in the context having three clients. Instead all XF86DRI proto
fowarding request should be coded by hand and only forward the
protocol requests
Diffstat (limited to 'hw/kdrive/ephyr/ephyrdriext.c')
-rw-r--r-- | hw/kdrive/ephyr/ephyrdriext.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/hw/kdrive/ephyr/ephyrdriext.c b/hw/kdrive/ephyr/ephyrdriext.c index d54da2164..443fe9d57 100644 --- a/hw/kdrive/ephyr/ephyrdriext.c +++ b/hw/kdrive/ephyr/ephyrdriext.c @@ -446,13 +446,14 @@ ProcXF86DRIDestroyDrawable (register ClientPtr client) static int ProcXF86DRIGetDrawableInfo (register ClientPtr client) { - xXF86DRIGetDrawableInfoReply rep; + xXF86DRIGetDrawableInfoReply rep; DrawablePtr drawable; - int X, Y, W, H, backX, backY, rc; - drm_clip_rect_t * pClipRects, *pClippedRects; - drm_clip_rect_t * pBackClipRects; + int X=0, Y=0, W=0, H=0, backX=0, backY=0, rc=0; + drm_clip_rect_t *pClipRects=NULL, *pClippedRects=NULL; + drm_clip_rect_t *pBackClipRects=NULL; EPHYR_LOG ("enter\n") ; + memset (&rep, 0, sizeof (rep)) ; REQUEST(xXF86DRIGetDrawableInfoReq); REQUEST_SIZE_MATCH(xXF86DRIGetDrawableInfoReq); if (stuff->screen >= screenInfo.numScreens) { |