Opened 12 years ago

Closed 10 years ago

#5266 closed Feature Requests (fixed)

mapped_region::flush improvement

Reported by: dmitry_b@… Owned by: Ion Gaztañaga
Milestone: To Be Determined Component: interprocess
Version: Boost Development Trunk Severity: Problem
Keywords: Cc:

Description

The function flush shoud be changed or made polymorf in order to have an ability to set sync flags of msync directly

like this

function mapped_region::flush(std::size_t mapping_offset, std::size_t numbytes, int flags)

The following flags are defined for msync():

MS_ASYNC

Perform asynchronous writes.

MS_SYNC

Perform synchronous writes.

MS_INVALIDATE

Invalidate mappings.

this is critical for some applications that shoud be sure that data if fully transfered to the device.

Thanks for help.

Change History (3)

comment:1 by Ion Gaztañaga, 12 years ago

Resolution: wontfix
Status: newclosed

Sorry, that wouldn't be portable for other platforms, so I'm afraid you'll need to call msync yourself with your custom params.

comment:2 by dan.eloff@…, 11 years ago

Resolution: wontfix
Status: closedreopened
Version: Boost 1.46.0Boost Development Trunk

How about an overload:

mapped_region::flush(std::size_t mapping_offset, std::size_t numbytes, bool sync)

which uses msycn(MS_SYNC) on posix systems and FlushViewOfFile + FlushFileBuffers on windows

If there are platforms where it cannot be supported, flush with sync=true should throw an exception.

This removes the burden of writing a multiple platform flush(..., sync=true) from the user, which this library does a great job of for other memory mapped file operations. That should cover all the common use cases.

comment:3 by Ion Gaztañaga, 10 years ago

Resolution: fixed
Status: reopenedclosed

Implemented in Boost 1.51:

bool flush(std::size_t = 0, std::size_t = 0, bool = true);

Note: See TracTickets for help on using tickets.