char-win: do not override chr_free

For some unclear reason to me, char-file does not have chr_free on
win32. Since we want to switch to instance finalizer instead of class
chr_free, we should be able to run the base WinChardev class finalizer
in any case. Use a boolean to skip free to ease the transition to
instance finalizer.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Marc-André Lureau 2016-12-08 18:22:04 +03:00
parent 1566b0c455
commit c266d94e7b

View file

@ -2122,6 +2122,8 @@ typedef struct {
/* Protected by the Chardev chr_write_lock. */
OVERLAPPED osend;
/* FIXME: file/console do not finalize */
bool skip_free;
} WinChardev;
#define TYPE_CHARDEV_WIN "chardev-win"
@ -2152,6 +2154,10 @@ static void win_chr_free(Chardev *chr)
{
WinChardev *s = WIN_CHARDEV(chr);
if (s->skip_free) {
return;
}
if (s->hsend) {
CloseHandle(s->hsend);
s->hsend = NULL;
@ -2432,6 +2438,7 @@ static void qemu_chr_open_win_file(Chardev *chr, HANDLE fd_out)
{
WinChardev *s = WIN_CHARDEV(chr);
s->skip_free = true;
s->hcom = fd_out;
}
@ -2468,7 +2475,6 @@ static void char_console_class_init(ObjectClass *oc, void *data)
ChardevClass *cc = CHARDEV_CLASS(oc);
cc->open = qemu_chr_open_win_con;
cc->chr_free = NULL;
}
static const TypeInfo char_console_type_info = {
@ -4731,10 +4737,6 @@ static void char_file_class_init(ObjectClass *oc, void *data)
ChardevClass *cc = CHARDEV_CLASS(oc);
cc->open = qmp_chardev_open_file;
#ifdef _WIN32
/* FIXME: no chr_free */
cc->chr_free = NULL;
#endif
}
static const TypeInfo char_file_type_info = {