Eliminate an unneeded reference on a vm object. If, in fact, the nearby

vm_map_find() fails, then the excess reference causes the vm object to be
leaked.

Reviewed by:	tegge
This commit is contained in:
Alan Cox 2005-08-28 00:24:58 +00:00
parent 4167396552
commit 45e31b6034
2 changed files with 0 additions and 4 deletions

View File

@ -704,7 +704,6 @@ link_elf_load_file(linker_class_t cls, const char* filename,
error = ENOMEM;
goto out;
}
vm_object_reference(ef->object);
ef->address = (caddr_t) vm_map_min(kernel_map);
error = vm_map_find(kernel_map, ef->object, 0,
(vm_offset_t *) &ef->address,
@ -884,7 +883,6 @@ link_elf_unload_file(linker_file_t file)
vm_map_remove(kernel_map, (vm_offset_t) ef->address,
(vm_offset_t) ef->address
+ (ef->object->size << PAGE_SHIFT));
vm_object_deallocate(ef->object);
}
#else
if (ef->address)

View File

@ -640,7 +640,6 @@ link_elf_load_file(linker_class_t cls, const char *filename,
error = ENOMEM;
goto out;
}
vm_object_reference(ef->object);
ef->address = (caddr_t) vm_map_min(kernel_map);
error = vm_map_find(kernel_map, ef->object, 0, &mapbase,
round_page(mapsize), TRUE, VM_PROT_ALL, VM_PROT_ALL, FALSE);
@ -828,7 +827,6 @@ link_elf_unload_file(linker_file_t file)
vm_map_remove(kernel_map, (vm_offset_t) ef->address,
(vm_offset_t) ef->address +
(ef->object->size << PAGE_SHIFT));
vm_object_deallocate(ef->object);
}
if (ef->e_shdr)
free(ef->e_shdr, M_LINKER);