Comments (10)
This is similar to why for example File::set_len takes &self
Oh wow. I didn't knew that. I guess as long as we're modifying something that isn't in full Rust control - there is no need for &mut self
. Interesting edge case.
from memmap2-rs.
Done.
from memmap2-rs.
I think this is a bug as there should be no external synchronization requirements, c.f. e.g. here. It also delegates to an internal method taking &self
.
Would you mind creating a PR?
from memmap2-rs.
Will do.
from memmap2-rs.
Interesting. @adamreichold shouldn't we make those methods &mut
instead? We're mutating the memory map handle content after all, sort of.
from memmap2-rs.
But can't the OS already flush pages at any point in time asynchronously?
from memmap2-rs.
What we are mutating are the page tables maintained by the operating system. Those are internally synchronized by the kernel (e.g. Linux's infamous mmap_sem
) and hence POSIX mandates that mlock
is safe to call from multiple threads.
This is similar to why for example File::set_len
takes &self
even though it definitely modifies the underlying file. The shared mutable state, i.e. the file system, is synchronized internally via the operating system. And this is strictly necessary as this particular state is shared with other processes and the kernel cannot allow one process to introduce data races into another.
This synchronization is also the reason why heavily multi-threaded programs on Linux suffer when a lot of mmap
operations are involved, because those are always serialised by mmap_sem
.
from memmap2-rs.
(There is even talk about sharing not only pages but also page tables between processes for reasons of efficiency for heavily containerized systems so that mlock
in one process would affect the mapping in all other processes sharing it, c.f. https://lwn.net/Articles/895217/)
from memmap2-rs.
Thanks for the quick response & merge. 😄
from memmap2-rs.
@RazrFalcon Would you mind to push this to crates.io
in the upcoming days?
from memmap2-rs.
Related Issues (20)
- Migrate to `safer_owning_ref` HOT 1
- why does memmap2::Mmap::map need to be unsafe? HOT 4
- Implement AsRawFd, IntoRawFd, AsRawHandle, IntoRawHandle and Into<Stdio> for MMap HOT 2
- Composite memory maps currently impossible HOT 7
- mmap'd anon pages fail in io_uring IOSQE_BUFFER_SELECT usage HOT 2
- advise_writes_unsafely_to_part_of_map test fails on powerpc64le-unknown-linux-gnu HOT 2
- error[E0433]: failed to resolve: could not find `Advice` in `memmap2` HOT 1
- PermissionDenied, message: "Access is denied." at remove file after read on Github Action WIndows HOT 2
- Doesn't compile for freebsd HOT 3
- v0.9.2 build failed for android target. HOT 3
- Support for `MS_INVALIDATE`? HOT 8
- Mac osx support HOT 1
- Support `mremap(2)` HOT 1
- Mapping beyond 4GB offset if broken on 32 bit glibc (Linux) HOT 3
- Support multiple advice HOT 2
- Contributing a migration from rustix to libc HOT 9
- MSRV and edition HOT 5
- Merging changes with memmapix HOT 24
- memmap2 `advise` is unsound HOT 8
- Interest is supporting mbind HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from memmap2-rs.