summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Srb <msrb@suse.com>2014-11-03 12:43:40 +0200
committerPeter Hutterer <peter.hutterer@who-t.net>2014-11-04 09:11:57 +1000
commitc648441036cf5ffc5225cd484e2c906d374f0a4b (patch)
treebab3f7dfab8c905a855e64c837c43e751882fb37
parent29c77457ad86966ae2204b865fb8b437269063c4 (diff)
downloadxorg-lib-libXi-c648441036cf5ffc5225cd484e2c906d374f0a4b.tar.gz
XIGrabDevice: Unlock display in error path.
Signed-off-by: Michal Srb <msrb@suse.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/XIGrabDevice.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/XIGrabDevice.c b/src/XIGrabDevice.c
index a8c5697..22f4ea1 100644
--- a/src/XIGrabDevice.c
+++ b/src/XIGrabDevice.c
@@ -53,14 +53,20 @@ XIGrabDevice(Display* dpy, int deviceid, Window grab_window, Time time,
if (mask->mask_len > INT_MAX - 3 ||
(mask->mask_len + 3)/4 >= 0xffff)
- return BadValue;
+ {
+ reply.status = BadValue;
+ goto out;
+ }
/* mask->mask_len is in bytes, but we need 4-byte units on the wire,
* and they need to be padded with 0 */
len = (mask->mask_len + 3)/4;
buff = calloc(4, len);
if (!buff)
- return BadAlloc;
+ {
+ reply.status = BadAlloc;
+ goto out;
+ }
GetReq(XIGrabDevice, req);
req->reqType = extinfo->codes->major_opcode;
@@ -83,6 +89,7 @@ XIGrabDevice(Display* dpy, int deviceid, Window grab_window, Time time,
if (_XReply(dpy, (xReply *)&reply, 0, xTrue) == 0)
reply.status = GrabSuccess;
+out:
UnlockDisplay(dpy);
SyncHandle();