boostorg / interprocess

Boost.org interprocess module
http://boost.org/libs/interprocess
132 stars 117 forks source link

Interprocess anonymous mutex hangs with Apple Silicon #176

Open r0ck3r008 opened 2 years ago

r0ck3r008 commented 2 years ago

Hi, boost interprocess anonymous mutex seems not to be handling well in ARM64 of Apple Silicon.

#include <iostream>
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/sync/interprocess_mutex.hpp>

using namespace boost::interprocess;

int main() {
    try{
        managed_shared_memory managed_shm{open_or_create, "shm", 1024};
        interprocess_mutex *mtx =
            managed_shm.find_or_construct<interprocess_mutex>("mtx")();

        mtx->lock();
        std::cout << "Critial section" << std::endl;
        mtx->unlock();
    } catch (const boost::interprocess::interprocess_exception &e) {
        std::cerr << "Interprocess exception thrown: " << e.what() << std::endl;
        _exit(1);
    }
}

Compilation steps followed

clang++ -std=c++17 -arch arm64 boost_interprocess.cpp -I<BOOST_HOME> -o boost_interprocess_arm64 # For arm64 only build
clang++ -std=c++17 -arch x86_64 boost_interprocess.cpp -I<BOOST_HOME> -o boost_interprocess_x64 # For x64 only build 

Expected Behavior Both the instantiations should work and print Critical Section.

What was observed When arm64 build is executed first, it works fine, but when x64 build is executed, the subsequent arm64 execution hangs.

Steps to reproduce

Environment tested on

igaztanaga commented 2 years ago

I don't have access to a Mac, so I would need some debugging and help from your side.

r0ck3r008 commented 2 years ago

@igaztanaga sure let me know how I can help.