[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 25/39] chardev/char-file: Add FILE_SHARE_WRITE when openning t
From: |
Bin Meng |
Subject: |
[PATCH v2 25/39] chardev/char-file: Add FILE_SHARE_WRITE when openning the file for win32 |
Date: |
Tue, 20 Sep 2022 18:31:45 +0800 |
From: Xuzhou Cheng <xuzhou.cheng@windriver.com>
The combination of GENERIC_WRITE and FILE_SHARE_READ options does
not allow the same file to be opened again by CreateFile() from
another QEMU process with the same options when the previous QEMU
process still holds the file handle opened.
This was triggered by running the test_multifd_tcp_cancel() case on
Windows, which cancels the migration, and launches another QEMU
process to migrate with the same file opened for write. Chances are
that the previous QEMU process does not quit before the new QEMU
process runs hence the old one still holds the file handle that does
not allow shared write permission then the new QEMU process will fail.
As per [1] we should add FILE_SHARE_WRITE to the share mode to allow
such use case. This change makes the behavior be consistent with the
POSIX platforms.
[1]
https://docs.microsoft.com/en-us/windows/win32/fileio/creating-and-opening-files
Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
Changes in v2:
- Update commit message to include the use case why we should set
FILE_SHARE_WRITE when openning the file for win32
chardev/char-file.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/chardev/char-file.c b/chardev/char-file.c
index 2fd80707e5..66385211eb 100644
--- a/chardev/char-file.c
+++ b/chardev/char-file.c
@@ -60,8 +60,8 @@ static void qmp_chardev_open_file(Chardev *chr,
flags = CREATE_ALWAYS;
}
- out = CreateFile(file->out, accessmode, FILE_SHARE_READ, NULL, flags,
- FILE_ATTRIBUTE_NORMAL, NULL);
+ out = CreateFile(file->out, accessmode, FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, flags, FILE_ATTRIBUTE_NORMAL, NULL);
if (out == INVALID_HANDLE_VALUE) {
error_setg(errp, "open %s failed", file->out);
return;
--
2.34.1
- [PATCH v2 27/39] hw/ppc: spapr: Use qemu_vfree() to free spapr->htab, (continued)
- [PATCH v2 27/39] hw/ppc: spapr: Use qemu_vfree() to free spapr->htab, Bin Meng, 2022/09/20
- [PATCH v2 26/39] tests/qtest: migration-test: Make sure QEMU process "to" exited after migration is canceled, Bin Meng, 2022/09/20
- [PATCH v2 21/39] tests/qtest: bios-tables-test: Adapt the case for win32, Bin Meng, 2022/09/20
- [PATCH v2 22/39] tests/qtest: migration-test: Disable IO redirection for win32, Bin Meng, 2022/09/20
- [PATCH v2 29/39] tests/qtest: microbit-test: Fix socket access for win32, Bin Meng, 2022/09/20
- [PATCH v2 25/39] chardev/char-file: Add FILE_SHARE_WRITE when openning the file for win32,
Bin Meng <=
- [PATCH v2 31/39] tests/qtest: libqtest: Correct the timeout unit of blocking receive calls for win32, Bin Meng, 2022/09/20
- [PATCH v2 33/39] io/channel-watch: Drop the unnecessary cast, Bin Meng, 2022/09/20
- [PATCH v2 36/39] .gitlab-ci.d/windows.yml: Increase the timeout to 90 minutes, Bin Meng, 2022/09/20