The mmap/mman compat layer for mingw uses the CreateFileMapping
and UnmapViewOfFile thus implicitly imposes an order for truncation and
ummapping [1].
For truncation calls, the underlying windows API call is SetEndOfFile.
This function requires that the file be unmapped before being called [1].
[1]
If CreateFileMapping is called to create a file mapping object for
hFile, UnmapViewOfFile must be called first to unmap all views and
call CloseHandle to close the file mapping object before you can call
SetEndOfFile.
[1] https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setendoffile#remarks
Change-Id: Id4713ca3af612baa24e1fa4a749384eab452598a
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1519
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
+ if (ctfser->base_mma) {
+ /* Unmap old base */
+ ret = munmap_align(ctfser->base_mma);
+ if (ret) {
+ BT_LOGE_ERRNO("Failed to unmap stream file",
+ ": ret=%d, size-bytes=%" PRIu64,
+ ret, ctfser->stream_size_bytes);
+ goto end;
+ }
+
+ ctfser->base_mma = NULL;
+ }
+
/*
* Truncate the stream file's size to the minimum required to
* fit the last packet as we might have grown it too much during
/*
* Truncate the stream file's size to the minimum required to
* fit the last packet as we might have grown it too much during
- if (ctfser->base_mma) {
- /* Unmap old base */
- ret = munmap_align(ctfser->base_mma);
- if (ret) {
- BT_LOGE_ERRNO("Failed to unmap stream file",
- ": ret=%d, size-bytes=%" PRIu64,
- ret, ctfser->stream_size_bytes);
- goto end;
- }
-
- ctfser->base_mma = NULL;
- }
ret = close(ctfser->fd);
if (ret) {
ret = close(ctfser->fd);
if (ret) {