mirror of https://github.com/xemu-project/xemu.git
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:
parent
1566b0c455
commit
c266d94e7b
12
qemu-char.c
12
qemu-char.c
|
@ -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 = {
|
||||
|
|
Loading…
Reference in New Issue