Hi On Wed, Aug 24, 2022 at 2:03 PM Bin Meng <bmeng...@gmail.com> wrote:
> From: Bin Meng <bin.m...@windriver.com> > > On Windows, the MinGW provided mkstemp() API opens the file with > exclusive access, denying other processes to read/write the file. > Such behavior prevents the QEMU executable from opening the file, > (e.g.: CreateFile returns ERROR_SHARING_VIOLATION). > g_mkstemp() doesn't have this behaviour (after running a quick test). Use it? > > This can be fixed by closing the file and reopening it. > > Signed-off-by: Bin Meng <bin.m...@windriver.com> > --- > > tests/qtest/ahci-test.c | 14 ++++++++++++++ > tests/qtest/boot-serial-test.c | 13 +++++++++++++ > 2 files changed, 27 insertions(+) > > diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c > index f26cd6f86f..0e88cd0eef 100644 > --- a/tests/qtest/ahci-test.c > +++ b/tests/qtest/ahci-test.c > @@ -1443,6 +1443,20 @@ static int prepare_iso(size_t size, unsigned char > **buf, char **name) > int fd = mkstemp(cdrom_path); > > g_assert(fd != -1); > +#ifdef _WIN32 > + /* > + * On Windows, the MinGW provided mkstemp() API opens the file with > + * exclusive access, denying other processes to read/write the file. > + * Such behavior prevents the QEMU executable from opening the file, > + * (e.g.: CreateFile returns ERROR_SHARING_VIOLATION). > + * > + * Close the file and reopen it. > + */ > + close(fd); > + fd = open(cdrom_path, O_WRONLY); > + g_assert(fd != -1); > +#endif > + > g_assert(buf); > g_assert(name); > patt = g_malloc(size); > diff --git a/tests/qtest/boot-serial-test.c > b/tests/qtest/boot-serial-test.c > index 404adcfa20..fb6c81bf35 100644 > --- a/tests/qtest/boot-serial-test.c > +++ b/tests/qtest/boot-serial-test.c > @@ -235,6 +235,19 @@ static void test_machine(const void *data) > > ser_fd = mkstemp(serialtmp); > g_assert(ser_fd != -1); > +#ifdef _WIN32 > + /* > + * On Windows, the MinGW provided mkstemp() API opens the file with > + * exclusive access, denying other processes to read/write the file. > + * Such behavior prevents the QEMU executable from opening the file, > + * (e.g.: CreateFile returns ERROR_SHARING_VIOLATION). > + * > + * Close the file and reopen it. > + */ > + close(ser_fd); > + ser_fd = open(serialtmp, O_RDONLY); > + g_assert(ser_fd != -1); > +#endif > > if (test->kernel) { > code = test->kernel; > -- > 2.34.1 > > > -- Marc-André Lureau