Coder Social home page Coder Social logo

Comments (10)

RazrFalcon avatar RazrFalcon commented on September 3, 2024 1

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.

RazrFalcon avatar RazrFalcon commented on September 3, 2024 1

Done.

from memmap2-rs.

adamreichold avatar adamreichold commented on September 3, 2024

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.

timvisee avatar timvisee commented on September 3, 2024

Will do.

from memmap2-rs.

RazrFalcon avatar RazrFalcon commented on September 3, 2024

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.

timvisee avatar timvisee commented on September 3, 2024

But can't the OS already flush pages at any point in time asynchronously?

from memmap2-rs.

adamreichold avatar adamreichold commented on September 3, 2024

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.

adamreichold avatar adamreichold commented on September 3, 2024

(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.

timvisee avatar timvisee commented on September 3, 2024

Thanks for the quick response & merge. 😄

from memmap2-rs.

timvisee avatar timvisee commented on September 3, 2024

@RazrFalcon Would you mind to push this to crates.io in the upcoming days?

from memmap2-rs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.