summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrianp <brianp>2004-04-26 15:05:13 +0000
committerbrianp <brianp>2004-04-26 15:05:13 +0000
commitb42adba4a86097ff70b190ba4d58b7de9e38e087 (patch)
tree9ecd5e18f9269be44c759a9e53b267d86ff04dc3
parentc53d590294ef8bd6cb5c2c4c0f45717cd41a1a5e (diff)
fixe memleak in drmMapBufs (Tilman Sauerbeck)
-rw-r--r--xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c b/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c
index 00d94e108..36a583ef6 100644
--- a/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c
+++ b/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c
@@ -1138,7 +1138,8 @@ drmBufMapPtr drmMapBufs(int fd)
bufs.virtual = NULL;
if (ioctl(fd, DRM_IOCTL_MAP_BUFS, &bufs)) return NULL;
- if (bufs.count) {
+ if (!bufs.count) return NULL;
+
if (!(bufs.list = drmMalloc(bufs.count * sizeof(*bufs.list))))
return NULL;
@@ -1157,9 +1158,10 @@ drmBufMapPtr drmMapBufs(int fd)
retval->list[i].used = 0;
retval->list[i].address = bufs.list[i].address;
}
+
+ drmFree(bufs.list);
+
return retval;
- }
- return NULL;
}
@@ -1169,7 +1171,8 @@ drmBufMapPtr drmMapBufs(int fd)
* \return zero on success, or negative value on failure.
*
* \internal
- * Calls munmap() for every buffer stored in \p bufs.
+ * Calls munmap() for every buffer stored in \p bufs and frees the
+ * memory allocated by drmMapBufs().
*/
int drmUnmapBufs(drmBufMapPtr bufs)
{
@@ -1178,6 +1181,10 @@ int drmUnmapBufs(drmBufMapPtr bufs)
for (i = 0; i < bufs->count; i++) {
munmap(bufs->list[i].address, bufs->list[i].total);
}
+
+ drmFree(bufs->list);
+ drmFree(bufs);
+
return 0;
}