diff options
author | marha <marha@users.sourceforge.net> | 2013-10-21 07:48:16 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-10-21 07:48:16 +0200 |
commit | c665b6e88274f8bc603b0f14f92bf09d2023bd4d (patch) | |
tree | e6b3c81a76d0cc2df868263aeae0ab045eaf45b4 /xorg-server/hw/dmx/glxProxy | |
parent | 91e353434f0a6859f404be05581f44d009ca5d6c (diff) | |
parent | 6d895f30ab93d71afddc612d8b007f2de7f04165 (diff) | |
download | vcxsrv-c665b6e88274f8bc603b0f14f92bf09d2023bd4d.tar.gz vcxsrv-c665b6e88274f8bc603b0f14f92bf09d2023bd4d.tar.bz2 vcxsrv-c665b6e88274f8bc603b0f14f92bf09d2023bd4d.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
fontconfig mesa xserver xkeyboard-config git update 21 okt 2013
Diffstat (limited to 'xorg-server/hw/dmx/glxProxy')
-rw-r--r-- | xorg-server/hw/dmx/glxProxy/glxsingle.c | 30 | ||||
-rw-r--r-- | xorg-server/hw/dmx/glxProxy/glxvendor.c | 30 |
2 files changed, 34 insertions, 26 deletions
diff --git a/xorg-server/hw/dmx/glxProxy/glxsingle.c b/xorg-server/hw/dmx/glxProxy/glxsingle.c index abfb880a3..679a302ea 100644 --- a/xorg-server/hw/dmx/glxProxy/glxsingle.c +++ b/xorg-server/hw/dmx/glxProxy/glxsingle.c @@ -349,25 +349,29 @@ __glXForwardAllWithReply(__GLXclientState * cl, GLbyte * pc) * get the reply from the back-end server */ _XReply(dpy, (xReply *) &be_reply, 0, False); - be_buf_size = be_reply.length << 2; - if (be_buf_size > 0) { - be_buf = (char *) malloc(be_buf_size); - if (be_buf) { - _XRead(dpy, be_buf, be_buf_size); + if (s == from_screen) { + /* Save data from last reply to send on to client */ + be_buf_size = be_reply.length << 2; + if (be_buf_size > 0) { + be_buf = malloc(be_buf_size); + if (be_buf) { + _XRead(dpy, be_buf, be_buf_size); + } + else { + /* Throw data on the floor */ + _XEatDataWords(dpy, be_reply.length); + return BadAlloc; + } } - else { - /* Throw data on the floor */ + } + else { + /* Just discard data from all replies before the last one */ + if (be_reply.length > 0) _XEatDataWords(dpy, be_reply.length); - return BadAlloc; - } } UnlockDisplay(dpy); SyncHandle(); - - if (s > from_screen && be_buf_size > 0) { - free(be_buf); - } } /* diff --git a/xorg-server/hw/dmx/glxProxy/glxvendor.c b/xorg-server/hw/dmx/glxProxy/glxvendor.c index 50d505c4b..b475daf0f 100644 --- a/xorg-server/hw/dmx/glxProxy/glxvendor.c +++ b/xorg-server/hw/dmx/glxProxy/glxvendor.c @@ -332,25 +332,29 @@ __glXVForwardAllWithReply(__GLXclientState * cl, GLbyte * pc) * get the reply from the back-end server */ _XReply(dpy, (xReply *) &be_reply, 0, False); - be_buf_size = be_reply.length << 2; - if (be_buf_size > 0) { - be_buf = (char *) malloc(be_buf_size); - if (be_buf) { - _XRead(dpy, be_buf, be_buf_size); + if (s == from_screen) { + /* Save data from last reply to send on to client */ + be_buf_size = be_reply.length << 2; + if (be_buf_size > 0) { + be_buf = malloc(be_buf_size); + if (be_buf) { + _XRead(dpy, be_buf, be_buf_size); + } + else { + /* Throw data on the floor */ + _XEatDataWords(dpy, be_reply.length); + return BadAlloc; + } } - else { - /* Throw data on the floor */ + } + else { + /* Just discard data from all replies before the last one */ + if (be_reply.length > 0) _XEatDataWords(dpy, be_reply.length); - return BadAlloc; - } } UnlockDisplay(dpy); SyncHandle(); - - if (s > from_screen && be_buf_size > 0) { - free(be_buf); - } } /* |