Skip to content
  • Lukas Straub's avatar
    feb774ca
    chardev: Fix yank with the chardev-change case · feb774ca
    Lukas Straub authored
    
    
    When changing from chardev-socket (which supports yank) to
    chardev-socket again, it fails, because the new chardev attempts
    to register a new yank instance. This in turn fails, as there
    still is the yank instance from the current chardev. Also,
    the old chardev shouldn't unregister the yank instance when it
    is freed.
    
    To fix this, now the new chardev only registers a yank instance if
    the current chardev doesn't support yank and thus hasn't registered
    one already. Also, when the old chardev is freed, it now only
    unregisters the yank instance if the new chardev doesn't need it.
    
    If the initialization of the new chardev fails, it still has
    chr->handover_yank_instance set and won't unregister the yank
    instance when it is freed.
    
    s->registered_yank is always true here, as chardev-change only works
    on user-visible chardevs and those are guraranteed to register a
    yank instance as they are initialized via
    chardev_new()
     qemu_char_open()
      cc->open() (qmp_chardev_open_socket()).
    
    Signed-off-by: default avatarLukas Straub <lukasstraub2@web.de>
    Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
    Tested-by: default avatarLi Zhang <li.zhang@cloud.ionos.com>
    Message-Id: <9637888d7591d2971975188478bb707299a1dc04.1617127849.git.lukasstraub2@web.de>
    feb774ca
    chardev: Fix yank with the chardev-change case
    Lukas Straub authored
    
    
    When changing from chardev-socket (which supports yank) to
    chardev-socket again, it fails, because the new chardev attempts
    to register a new yank instance. This in turn fails, as there
    still is the yank instance from the current chardev. Also,
    the old chardev shouldn't unregister the yank instance when it
    is freed.
    
    To fix this, now the new chardev only registers a yank instance if
    the current chardev doesn't support yank and thus hasn't registered
    one already. Also, when the old chardev is freed, it now only
    unregisters the yank instance if the new chardev doesn't need it.
    
    If the initialization of the new chardev fails, it still has
    chr->handover_yank_instance set and won't unregister the yank
    instance when it is freed.
    
    s->registered_yank is always true here, as chardev-change only works
    on user-visible chardevs and those are guraranteed to register a
    yank instance as they are initialized via
    chardev_new()
     qemu_char_open()
      cc->open() (qmp_chardev_open_socket()).
    
    Signed-off-by: default avatarLukas Straub <lukasstraub2@web.de>
    Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
    Tested-by: default avatarLi Zhang <li.zhang@cloud.ionos.com>
    Message-Id: <9637888d7591d2971975188478bb707299a1dc04.1617127849.git.lukasstraub2@web.de>
Loading