Subject: [boost] [interprocess] Sharing shared_memory_object across processes?
From: Joseph Van Riper (fleeb.fantastique_at_[hidden])
Date: 2012-04-25 14:26:01
I either do not understand what I am seeing, or I may have stumbled upon a
bug, at least in a Windows environment. Or, of course, my expectations may
The short of this is that when I create a
boost::interprocess::shared_memory_object that isn't removed for the
duration of the program's run, the reading program's run can't seem to open
the shared_memory_object, despite creating a
boost::interprocess::permissions object and calling 'set_unrestricted()'.
I get an exception indicating that access is denied.
If nothing else, the code I've provided is an interprocess version of the
classic read-writer's problem, second version (writers preferred). It may
be of use to someone with a little cleaning.
Compiler: MSVC++ 10
OS: Win 7 Pro, 64-bit.
Steps to reproduce:
1. In VC++ 10, create an empty command-line project.
2. Replace contents of your .cpp with the code in this e-mail.
4. Run the executable twice, first with an argument, next without.
The executable run without arguments indicates how much data was
transferred on the same line.
The executable run without arguments complains that access is denied.
If you #define BOLD_NEW_TEST and recompile, this program runs according to
expectations. This causes the objects to be compiled in a way where the
shared_memory_objects only last for as long as it takes to write or read
the data. I suspect this shouldn't be necessary, but perhaps I'm wrong.
The error is especially peculiar to me, as I can open the file itself with
a text editor. It doesn't seem like it should be denied.