• Michael Roth's avatar
    monitor: fix object_del for command-line-created objects · c645d5ac
    Michael Roth authored
    Currently objects specified on the command-line are only partially
    cleaned up when 'object_del' is issued in either HMP or QMP: the
    object itself is fully finalized, but the QemuOpts are not removed.
    This results in the following behavior:
    
      x86_64-softmmu/qemu-system-x86_64 -monitor stdio \
        -object memory-backend-ram,id=ram1,size=256M
    
      QEMU 2.7.91 monitor - type 'help' for more information
      (qemu) object_del ram1
      (qemu) object_del ram1
      object 'ram1' not found
      (qemu) object_add memory-backend-ram,id=ram1,size=256M
      Duplicate ID 'ram1' for object
      Try "help object_add" for more information
    
    which can be an issue for use-cases like memory hotplug.
    
    This happens on the HMP side because hmp_object_add() attempts to
    create a temporary QemuOpts entry with ID 'ram1', which ends up
    conflicting with the command-line-created entry, since it was never
    cleaned up during the previous hmp_object_del() call.
    
    We address this by adding a check in user_creatable_del(), which
    is called by both qmp_object_del() and hmp_object_del() to handle
    the actual object cleanup, to determine whether an option group entry
    matching the object's ID is present and removing it if it is.
    
    Note that qmp_object_add() never attempts to create a temporary
    QemuOpts entry, so it does not encounter the duplicate ID error,
    which is why this isn't generally visible in libvirt.
    
    Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
    Cc: Markus Armbruster <armbru@redhat.com>
    Cc: Eric Blake <eblake@redhat.com>
    Cc: Daniel Berrange <berrange@redhat.com>
    Cc: qemu-stable@nongnu.org
    Signed-off-by: 's avatarMichael Roth <mdroth@linux.vnet.ibm.com>
    Reviewed-by: 's avatarDaniel P. Berrange <berrange@redhat.com>
    Reviewed-by: 's avatarMarkus Armbruster <armbru@redhat.com>
    Message-Id: <1496531612-22166-3-git-send-email-mdroth@linux.vnet.ibm.com>
    Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
    c645d5ac
Name
Last commit
Last update
..
Makefile.objs Loading commit data...
container.c Loading commit data...
cpu.c Loading commit data...
object.c Loading commit data...
object_interfaces.c Loading commit data...
qom-qobject.c Loading commit data...
trace-events Loading commit data...