fix: store IPC file in application directory #5226
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
While trying to create a
message_queue
withwindows_shared_memory
, I noticed that it's not really possible without writing one completely from scratch (i.e. not using any/detail
headers) while only requiring a minimum boost version (we'd need to wait for Boost.Interprocess to implement something like it).But I discovered that we can set
BOOST_INTERPROCESS_SHARED_DIR_FUNC
and provide two functions that supply the directory of the IPC files. That's what I have done here.The functions provide the directory of
Paths::ipcDirectory
, which is<appDataDirectory>/IPC
on Windows and/tmp
everywhere else.Since the functions don't provide any context parameter, we need to use global state. The state is set once with
ipc::initPaths
.In my opinion, this does not resolve the issue #4084, since a memory mapped file is still created (...which can get large(?)). It partly fixes it, as the files are no longer outside the directory, hence the title "fix:".