summaryrefslogtreecommitdiff
path: root/linux-core/drm_drv.c
diff options
context:
space:
mode:
authorThomas Hellstrom <thomas@tungstengraphics.com>2006-06-06 17:46:17 +0000
committerThomas Hellstrom <thomas@tungstengraphics.com>2006-06-06 17:46:17 +0000
commit1a9e5bae109b476f9ee34975242c8938aaac4146 (patch)
tree91d96707a6c6bd4584fb2f196721479688d0df0c /linux-core/drm_drv.c
parent6bacb180cef00573fc41a1e79bdd5b89d6f1c1f5 (diff)
Fix drm_remove_magic potential memory leak / corruption. Move drm
authentication token hashing to new generic hash table implementation.
Diffstat (limited to 'linux-core/drm_drv.c')
-rw-r--r--linux-core/drm_drv.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c
index 127e21e9..07f9952c 100644
--- a/linux-core/drm_drv.c
+++ b/linux-core/drm_drv.c
@@ -163,14 +163,12 @@ int drm_lastclose(drm_device_t * dev)
dev->unique_len = 0;
}
- /* Clear pid list */
- for (i = 0; i < DRM_HASH_SIZE; i++) {
- for (pt = dev->magiclist[i].head; pt; pt = next) {
- next = pt->next;
- drm_free(pt, sizeof(*pt), DRM_MEM_MAGIC);
- }
- dev->magiclist[i].head = dev->magiclist[i].tail = NULL;
- }
+ list_for_each_entry_safe(pt, next, &dev->magicfree, head) {
+ list_del(&pt->head);
+ drm_ht_remove_item(&dev->magiclist, &pt->hash_item);
+ drm_free(pt, sizeof(*pt), DRM_MEM_MAGIC);
+ }
+
/* Clear AGP information */
if (drm_core_has_AGP(dev) && dev->agp) {