From a87f3e8b080205879232f34ff6977cb225b70e05 Mon Sep 17 00:00:00 2001 From: Amit Shah Date: Fri, 13 Jan 2012 15:29:47 +0530 Subject: [PATCH] qdev: Add a 'free' method to disassociate chardev from qdev device When a device is removed, remove the association with a chardev, if any, so that the chardev can be re-used later for other devices. Reported-by: Qunfang Zhang Fix-suggested-by: Markus Armbruster Signed-off-by: Amit Shah Signed-off-by: Anthony Liguori --- hw/qdev-properties.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index 663c2a0a19..02f0dae0bc 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -680,6 +680,16 @@ static int parse_chr(DeviceState *dev, Property *prop, const char *str) return 0; } +static void free_chr(DeviceState *dev, Property *prop) +{ + CharDriverState **ptr = qdev_get_prop_ptr(dev, prop); + + if (*ptr) { + qemu_chr_add_handlers(*ptr, NULL, NULL, NULL, NULL); + } +} + + static int print_chr(DeviceState *dev, Property *prop, char *dest, size_t len) { CharDriverState **ptr = qdev_get_prop_ptr(dev, prop); @@ -699,6 +709,7 @@ PropertyInfo qdev_prop_chr = { .print = print_chr, .get = get_generic, .set = set_generic, + .free = free_chr, }; /* --- netdev device --- */ -- GitLab