Opened 12 years ago
Closed 12 years ago
#4251 closed Bugs (fixed)
Interprocess failed to communicate in OS X 10.5.8 Leopard under 64 bit mode
Reported by: | Owned by: | Ion Gaztañaga | |
---|---|---|---|
Milestone: | Boost 1.43.0 | Component: | interprocess |
Version: | Boost 1.44.0 | Severity: | Problem |
Keywords: | Cc: |
Description
This issue only exists explicitly for OSX leopard 64 bits application trying to use IPC.
Windows 32/64 bits, XP, Vista, Win 7 has no issue and OSX 10.4: 32 bits, 10.5: 32 bits, 10.6: 32/64 bits all works fine.
The issue is due to "inline void get_bootstamp(std::string &s, bool add = false)" function.
When a 64 bits host application create the shared_memory_object, there will be a folder somewhat like "33FABFC2B8FACA0133FABFC2B8FACA01" being created in the boost_interprocess directory. When the 64 bits client application trying to open the created shared_memory_object, the "get_bootstamp(std::string &s, bool add = false)" function will return "33FABFC2B8FACA010000000000000000", therefore, the client will always failed to find the shared memory object.
Disabled bootstamp in Boost 1.47. This means that shared memory/queues will go to /tmp if it exists. If /tmp is not cleared on reboot shared memory will survive to reboots, but this behaviour is allowed by POSIX. Using bootstamps to detect reboots is doing more harm than good.