blob: 37a68fc02bd21a26f32c8465f8cc91b15d9a55b1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
id = 2905
title = "Windows Curses Display Infinite Loop"
state = "opened"
created_at = "2025-04-01T14:58:18.803Z"
closed_at = "n/a"
labels = ["GUI", "hostos: Windows", "workflow::Patch available"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/2905"
host-os = "Windows 10 22H2"
host-arch = "x86-64"
qemu-version = "QEMU emulator version 9.2.91 (v10.0.0-rc1-12076-g50ecdaef16)"
guest-os = "N/A"
guest-arch = "x86-64"
description = """The out-of-the-box `qemu-system-x86_64 -display curses` on Windows loops forever while displaying "VGA Blank Mode" instead of booting like `qemu-system-x86_64` does.
This is caused by an infinite loop in the below simplified code in `curses_refresh` in `ui/curses.c`:
```
int chr;
// ...trimmed
while (1) {
/* while there are any pending key strokes to process */
chr = console_getch(&maybe_keycode);
if (chr == -1)
break;
// ...trimmed
}
```
`console_getch` has return type `wint_t`. However, on Windows, `wint_t` is `unsigned short`. Therefore when `console_getch` returns -1, the -1 value of `unsigned short` will be silently converted into the `int` value 65535. This causes `65535 == -1` to always be false, and the loop will never break. I can send a patch to qemu-devel which retypes `chr` to `wint_t` and replaces occurences of -1 with `WEOF` (an alias for `(wint_t) -1`)."""
reproduce = """1. Install `qemu-w64-setup-20250326.exe` Windows qemu from https://qemu.weilnetz.de/w64/2025/
2. Run `./qemu-system-x86_64 -display curses`
3. "VGA Blank Mode" will appear on the screen forever"""
additional = """"""
|