mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
memory: add ref/unref calls
Add ref/unref calls at the following places: - places where memory regions are stashed by a listener and used outside the BQL (including in Xen or KVM). - memory_region_find callsites - creation of aliases and containers (only the aliased/contained region gets a reference to avoid loops) - around calls to del_subregion/add_subregion, where the region could disappear after the first call Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
3ce10901ca
commit
dfde4e6e1a
16 changed files with 63 additions and 5 deletions
|
@ -64,8 +64,12 @@ out:
|
|||
static void hostmem_listener_commit(MemoryListener *listener)
|
||||
{
|
||||
HostMem *hostmem = container_of(listener, HostMem, listener);
|
||||
int i;
|
||||
|
||||
qemu_mutex_lock(&hostmem->current_regions_lock);
|
||||
for (i = 0; i < hostmem->num_current_regions; i++) {
|
||||
memory_region_unref(hostmem->current_regions[i].mr);
|
||||
}
|
||||
g_free(hostmem->current_regions);
|
||||
hostmem->current_regions = hostmem->new_regions;
|
||||
hostmem->num_current_regions = hostmem->num_new_regions;
|
||||
|
@ -92,8 +96,11 @@ static void hostmem_append_new_region(HostMem *hostmem,
|
|||
.guest_addr = section->offset_within_address_space,
|
||||
.size = int128_get64(section->size),
|
||||
.readonly = section->readonly,
|
||||
.mr = section->mr,
|
||||
};
|
||||
hostmem->num_new_regions++;
|
||||
|
||||
memory_region_ref(section->mr);
|
||||
}
|
||||
|
||||
static void hostmem_listener_append_region(MemoryListener *listener,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue